因此,我在我的應用程序中使用了一個相當標準的嵌套模型實現的頁面,沿着標準Customer - > Order - > OrderLineItems類型的行。對我來說差別在於OrderLineItems的模型非常複雜。Knockoutjs - 調用valueHasMutated太頻繁?
在我的代碼中,爲了正確地更新我的視圖,我發現我調用了「myObservable.valueHasMutated()」很多東西,它們都帶有可觀察數組和可觀察對象。
這是一種直覺,不得不手動做這件事 - 但我不確定在哪裏可以知道可能需要改變的地方。所以有幾個問題:
- 這是「深/大」模型的正常嗎?
- 有沒有什麼明顯的我可能會尋找解決這個問題?
- 在KO上實現的這種複雜模型的Web上是否有示例?
什麼,我有我的視圖模型的一個例子:
self.projectsVisible = ko.observable(false);
self.toggleProjectVisibility = function() {
self.projectsVisible(!self.projectsVisible());
self.projectsVisible.valueHasMutated();
};
這是綁在按鈕元素和DIV:
<div data-bind="visible: projectsVisible">
<table>
<thead data-bind="template: {name: 'projectHeader'}"></thead>
<tbody data-bind="template: {name: 'project', foreach: projects}"></tbody>
</table>
</div>
<button type="button" data-bind="click: toggleProjectVisibility">
Toggle Projects On/Off
</button>
也許你可以在jsFiddle中找到顯示問題的東西?很少有你需要自己調用'valueHasMutated'的情況。一般來說,當您直接修改一個observable/observableArray包含的對象/數組並且想要觸發更新或創建訂閱並希望立即觸發它時,會使用這種方法。你在切換布爾值的情況下不需要它。我認爲一個jsFiddle會幫助我們縮小範圍。 –
我有類似的問題。 JSFiddle在這裏:http://jsfiddle.net/b22Ex/2/ 在這個問題,http://stackoverflow.com/questions/15798881/kogrid-update-cell它有人建議,我叫valueHasMutated()爲了我的更改才能生效。 – krasnaya