在对象中创建根模型可观察数组的克隆

Create clones of root model observable array within objects

本文关键字:数组 观察 模型 对象 创建      更新时间:2023-09-26

我正在尝试创建一个自我的克隆。在我创建的每个行对象中标记可观察数组,其中self。Field_name反映了除了self之外的值。field_value是每个Line对象的独立值。我对如何做到这一点有点困惑,我是否需要手动订阅来只更新其中一个值?

function TechnicalViewModel(){
    var root = this;
    function Tag(data){
        var self = this;
        self.field_name = ko.observable(data.field_name)
        self.field_value = ko.observable(data.field_value)
    }

    root.tags = ko.observableArray([
    { 
        new Tag(field_name : 'tag_name_1', field_value : '',
        new Tag(field_name : 'tag_name_2', field_value : '',
        new Tag(field_name : 'tag_name_3', field_value : ''
    }])

    function Line(data) {
        var self = this;
        self.tags = root.tags;
    }
    root.lines = ko.observableArray([]))
}

可使用Ko映射插件进行克隆。

 //Use this function as constructor function
 function Tag(data) {
    var self = this;
    self.field_name = data.field_name;
    self.field_value = data.field_value;
 }
 function Line(data) {
    var self = this;
    self.tags = ko.mapping.fromJS(root.tags); //mapping pluggin will make a copy of tags
    self.remove = function (data) {
        self.tags.remove(data);
    }
    self.add = function () {
        self.tags.push(new Tag({
            field_name: 'new tag_name',
            field_value: ''
        }));
    }
 }

小提琴演示