我刚开始用KnockoutJS弄湿我的脚。到目前为止,我有以下内容:
HTML:
<b>Selected:</b> <span data-bind="text: selectedName" ></span>
<div data-bind="foreach: matches">
<div data-bind="click: $root.SelectMatch" >
<strong data-bind="text: Name" ></strong>
<span data-bind="text: Age"></span>
<span data-bind="text: Citizenship"></span>
</div>
</div>
使用Javascript:
function TestViewModel() {
var self = this;
self.matches = ko.observableArray([
{ Name: 'Rodd Chin', Age: '42', Citizenship: 'American' },
{ Name: 'Ben Challinor', Age: '30', Citizenship: 'Russian'},
{ Name: 'Andrew Harris', Age: '35', Citizenship: 'Canadian' }
]);
self.selectedItem = ko.observable();
self.selectedName = ko.observable("[Empty]");
self.SelectMatch = function (match) {
self.selectedItem = match;
self.selectedName = match.Name;
};
}
ko.applyBindings(new TestViewModel());
对于第一个span标记的selectedName绑定,这一切似乎都除了。出于某种原因,永远不会更新。我已经尝试在vm中添加ko.computed()
属性,返回self.selectedItem.Name
并绑定到该属性,但这也没有用。
关于我可能做错的任何想法?谢谢你的帮助!
答案 0 :(得分:5)
很简单,设置一个observable的值你不应该指定这样的值
self.myObservable = newValue;
您必须设置,如下所示:
self.myObservable(newValue);
这与一个observable是自己的对象有关,它必须维护它的订阅和类似的东西。