2017-07-14 43 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