2012-03-02 92 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