2013-01-06 1 views
5

次の例がうまくいかない理由を理解しようとしています。observableArrayに項目を追加すると、jQueryボタンの表示が更新されない

observableArrayは、(valueHasMutated()を使用して)変更されたことを手動で通知するまで更新されません。

私は観察対象の全体が、変更されたときにビューが自動的に更新されると考えました。

<button type='button' id='add'>add</button> 
<button type='button' id='mutated'>force update</button> 
<div id="short_tasks" data-bind="foreach: list"> 
    <div data-bind="text: title"></div> 
</div> 

JS:

var ListTest = function() { 

    this.list = ko.observableArray([{title: 'item1'}]); 
} 

var viewModel = new ListTest(); 
ko.applyBindings(viewModel); 

$('#add').click(function() { 
    viewModel.list().push({title: 'new item'}); 
}); 

$('#mutated').click(function() { 
    viewModel.list.valueHasMutated(); 
}); 

jsFiddle:http://jsfiddle.net/InsaneWookie/HFgbR/

答えて

9

あなたは根本的な配列にアイテムをプッシュし、任意の加入者に通知しますれ、observableArrayに直接pushを呼び出すことになるでしょう。

viewModel.list.push({title: 'new item'}); 
+0

ありがとう、完璧に働いた。私は何かが欠けていたに違いないと知っていた。 – Rowan