1

在下面的代码中,我希望跨度文本在单击测试按钮后显示“已单击测试”。我可以看到 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);
4

1 回答 1

0

您在这里有两个错误:

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

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

2. 当你使用 observables 时,你需要把()它们放在后面,因为它不仅仅是一个变量,而是一个函数。所以你需要:

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

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

于 2012-11-14T02:43:35.580 回答