2016-06-08 2 views
0

У меня есть нокаутирующий МодельЛучший способ клонирования/копирования наблюдаемым в Knockout

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 наблюдаемого так что я могу сохранить его в массив AllItems и имею ItemNumber быть наблюдаемым для разных строк в массиве. Поэтому, если я добавлю 10 элементов, я хочу иметь возможность отслеживать изменения данных в каждом из 10 свойств номера элемента.

Благодаря

ответ

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); 
+0

Очень здорово .. Можете ли вы также, пожалуйста, покажите мне, как я могу удалить строки. – sp9

+0

Взгляните на обновленный пример 'jsfiddle'. –

+0

Красивая ... Большое вам спасибо – sp9