将可观察数组存储在变量中并替换它的内容

时间:2014-05-17 03:44:30

标签: javascript knockout.js

如何通过将可观察数组的内容存储在另一个变量中来替换它,例如:

我有一个可观察的数组:var list = self.StateList();

我想这样做:

var cities = self.CityList();
//console.log(cities);
 var oldLocation = ko.utils.arrayFirst(cities, function (item) {
     return item.CityId == args.CityId;

 });

 cities.replace(oldLocation, args);

但它显示错误城市没有方法replace

UPDATE我试过这个anwser,它有些帮助我我使用了可观察切片方法,它帮助了一些方法:

   var cities = self.CityList();
   var observble = ko.observable();
   observble(cities.slice(0));

因此,我的所有城市observable都将被复制到全新的observable

现在我可以做任何我想要的事情,因为它是我的城市的同一个可观察的阵列。有人可以想到为什么要将可观察数组转换为变量并再次将其转换为可观察数组。我需要将我的可观察数组发送到函数。如果还有其他更好的解决方案,请在此处发布。

1 个答案:

答案 0 :(得分:1)

请试试这个

// The observable array
this.CityList = ko.observableArray([{CityId :1 }, {CityId :2 } ,{CityId :3 }]);

// observable array stored in variable. The brackets should not be used if you 
// want to treat the cities variable as an observable array
 var cities = this.CityList;

 // Find a city with id 1.
 var oldLocation = ko.utils.arrayFirst(cities(), function (item) {
     return item.CityId == 1;

 });

console.log(oldLocation);

// Replace the city with id 5
cities.replace(oldLocation , {CityId :5 });

// The values in both arrays will get modified
console.log(cities()[0]);
console.log(this.CityList()[0]);