遇到一些基本的KnockoutJS问题

RHa*_*ris 1 knockout.js

我刚开始用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>
Run Code Online (Sandbox Code Playgroud)

使用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());
Run Code Online (Sandbox Code Playgroud)

除了第一个span标记的selectedName绑定,这一切似乎都有效.出于某种原因,永远不会更新.我已经尝试将一个ko.computed()属性添加到返回self.selectedItem.Name并绑定到该vm的vm ,但这也不起作用.

关于我可能做错的任何想法?谢谢您的帮助!

Mik*_*erg 5

很简单,要设置一个observable的值,你不应该像这样赋值

self.myObservable = newValue;
Run Code Online (Sandbox Code Playgroud)

你必须这样设置:

self.myObservable(newValue);
Run Code Online (Sandbox Code Playgroud)

这与可观察对象有关,它必须维护它的订阅和类似的东西.