2012-03-02 95 views
1

我刚刚开始用KnockoutJS弄湿我的脚。到目前为止,我有以下几点:遇到一些基本的问题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()); 

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

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

回答

5

很简单,设置一个观察到的价值,你不应该分配这样

self.myObservable = newValue; 

必须设置像这样的价值:

self.myObservable(newValue); 

这有做一个可观​​察的是它自己的对象,它必须保持它的订阅和类似的东西。

+0

谢谢!我也改变了span标签的绑定,就像'text:selectedItem()。Name'一样 – RHarris 2012-03-06 19:25:32