在Knockout

时间:2016-06-08 16:31:58

标签: jquery knockout.js

我有一个淘汰模型

  self.newItem = ko.observable({
        manufacturer: ko.observable(),
        itemnumber: ko.observable(),
        itemDescription: ko.observable(),
        priceclass: ko.observable()     

    });

我有另一个具有相同属性但只有itemnumber可观察的。

 self.newItemToInsert = ko.observable({
        manufacturer: "",
        itemnumber: ko.observable(),
        itemDescription: "",
        priceclass: ""  

    });

我有另一个可观察的数组来存储项目

self.AllItems = ko.observableArray();

现在我的问题是如何将newitem复制到newItemToInsert observable,这样我就可以将它保存到AllItems数组中,并且可以为数组中的不同行观察itemnumber。因此,如果我添加10个项目,我希望能够跟踪10个项目编号属性中每个项目的数据更改。

由于

1 个答案:

答案 0 :(得分:1)

如果我正确地提出了您的问题,您可以为项目和每个项目创建单独的视图模型,以创建该模型的new实例。然后在项目视图模型中,为所需的任何变量定义observable

示例:https://jsfiddle.net/9aLvd3uw/222/

VM:

var MainViewModel = function () {
   var _self = this;
   var i = 1;
   _self.Items = ko.observableArray([]);
   //Fake Data
   _self.Items.push(new ItemViewModel({ "manufacturer": "Co.0", "itemnumber": 123 ,"itemDescription": "Desc 0" , "priceclass" : "Class 0"}));
   //Add a new item with fake data
   self.ClickMe = function (){
     _self.Items.push(new ItemViewModel({ "manufacturer": "Co."+i, "itemnumber": 123 + i ,"itemDescription": "Desc" +i , "priceclass" : "Class "+i}));
     i++;
   }
}

var ItemViewModel = function (data) {
  var _self = this;
  _self.manufacturer = data.manufacturer;
  _self.itemnumber = ko.observable(data.itemnumber);
  _self.itemDescription = data.itemDescription;
  _self.priceclass = data.priceclass;
}
 ko.applyBindings(MainViewModel);