2017-07-14 73 views
0

我發現這個問題是像我相似 - Replace all elements in Knockout.js observableArray替換observableArray?

我只是有一個問題 - 如果我取代observableArray新的內容,是否會在UI也反映了所有的元素?

這裏的情景:我有一個html文件,該文件顯示table充滿內容。這是我這取jshtml之間綁定的數據js代碼片段 -

var table = ko.observableArray(); // {1,2,3,4,5} - UI shows 1,2,3,4,5 in the table 
// now I replace all the contents 
table = {6,3,8,9}; 
// **will the UI display the updated content, which is {6,7,8,9} in the table? Or will it still display {1,2,3,4,5}?** 
+2

在你的問題中,陣列是可觀察的,其內容不是。如果您更改數組的元素,則不會更新您的UI。如果您添加/刪除元素,則更新UI。以下是更多信息:http://knockoutjs.com/documentation/observableArrays.html –

+1

是的。我的意圖是刪除數組中的所有內容並添加新的內容,並確保新內容反映在UI中。 – AlwaysALearner

回答

1

是因爲它的可觀察到的它也將更新UI。 參見工作示例:

https://jsfiddle.net/fkxgk7rc/4/

var data = [1,2,3,4,5]; 
function viewModel() { 
    var self = this; 
    self.myList = ko.observableArray(data); 

    self.addToList = function (listData) { 
    for (var i = listData.length; i-- > 0;) 
     self.myList.push(listData[i]); 
    } 

    self.replaceList = function (listData) { 
     self.myList(listData); 
    } 
} 
+0

-1在OP的示例中,var'table'的值被覆蓋,並且不會更新UI。在你的答案和小提琴中,值被注入到observable中並且UI *被更新。這是一個重要的區別。如果有人簡單地閱讀OP的例子和你的「是」,他們會得出關於如何完成的錯誤結論。 – claytond