在下面的代码中,我希望在单击测试按钮后,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);
答案 0 :(得分:0)
这里有两个错误:
1。您正在将绑定应用于模型并使用title
属性,该属性在您单击按钮之前不存在。如果您正在使用模型的属性,则需要在绑定之前定义它:
viewModel.selectedItem = ko.observable({title: null});
2。当你使用observable时,你需要将()
放在它们之后,只要它不仅仅是一个变量而是一个函数。所以你需要:
<span data-bind="text: $root.selectedItem().title">
你可以在这里玩http://jsfiddle.net/fMKPs/