Knockoutjs Observable Binding

时间:2012-11-14 02:08:57

标签: knockout.js

在下面的代码中,我希望在单击测试按钮后,span文本会显示“test clicked”。我可以看到selectedItem.title正在更新。为什么这个数据绑定不起作用?

http://jsfiddle.net/TheMetalDog/C7k6d/

<button data-bind="click: setItem">Test</button>
Item <span data-bind="text: $root.selectedItem.title"></span>
<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>

-

var viewModel = {};
viewModel.selectedItem = ko.observable();

viewModel.setItem = function() {
    viewModel.selectedItem({title: 'clicked'}); 
};

ko.applyBindings(viewModel);

1 个答案:

答案 0 :(得分:0)

这里有两个错误:

1。您正在将绑定应用于模型并使用title属性,该属性在您单击按钮之前不存在。如果您正在使用模型的属性,则需要在绑定之前定义它:

viewModel.selectedItem = ko.observable({title: null});

2。当你使用observable时,你需要将()放在它们之后,只要它不仅仅是一个变量而是一个函数。所以你需要:

<span data-bind="text: $root.selectedItem().title">

你可以在这里玩http://jsfiddle.net/fMKPs/