2013-12-09 109 views
0

更新鏈接到foreach的可觀察數組將重繪forEach生成的所有DOM元素。沒有將可觀察元素綁定到數組中的對象的屬性,有沒有辦法避免完全重繪DOM?我很明顯想要更新的特定元素重繪,但如果我有一個隱藏/可見元素,它會重置爲默認(如果它是一個JS onclick風格的作品)。更新可觀察數組foreach刪除格式化knockoutjs

http://jsfiddle.net/OrganicCat/CjH87/6/

var SimpleListModel = function(items) { 
    this.items = ko.observableArray(items); 
    this.itemToAdd = ko.observable(""); 

    this.openItem = function(data, event) { 
     $(event.target).next().toggle(); 
    }; 
    this.modifyList = function() { 
     var modifiedList = ["Cats", "Dogs", "Hedgehogs"]; 
     this.items(modifiedList); 
    }; 
}; 

ko.applyBindings(new SimpleListModel(["Alpha", "Beta", "Gamma"])); 
+0

你是從數組中添加/刪除元素?或者只是更新項目的屬性? –

+0

更新數組中項目的屬性 – Organiccat

回答

2

你可能想看看你的架構了一下。

MVVM意味着你的整個視圖應該綁定到你的viewModel。所以所有元素都由視圖模型控制。

如果您嘗試做一半的方法,那麼您會發現自己正在與MVVM模式作鬥爭。如果您需要控制作爲foreach組成部分的元素的可見性,則需要控制可觀察數組的可見性。

希望有所幫助。

+0

我正在改變其中包含一些非常大的複雜對象的數組。實際上在observable數組上做一個array.map比較容易,不幸的是它重繪了它所綁定的foreach部分。總的來說,我不明白爲什麼更新數組必須重新繪製DOM元素的可見性,僅僅是因爲數組必須改變。我可以理解,如果數組元素的數量發生變化,但事實並非如此。 – Organiccat

+0

嗨,你有JSFiddle你想要做什麼? RE:用戶界面重繪數據發生變化時,這是MVVM體系結構的一個重點。即對數據的更改反映在用戶界面中。 –

+0

是的:http://jsfiddle.net/OrganicCat/CjH87/6/ 點擊其中一個元素,然後點擊「修改列表」。您會看到這些元素重置其可見性。 – Organiccat

相關問題