如何使可观察数组中的对象属性可观察?

如何使可观察数组中的对象属性可观察?

问题描述:

当在敲除映射中使用'create'选项时,我们将使数组成为可观察数组。 但是,我们如何让可观察数组中的每个对象的属性都是可观察的?如何使可观察数组中的对象属性可观察?

在这个从knockout文档中的例子中,children数组是一个可观察数组,但我想让每个对象字面值中的id,name等所有元素都成为可观察对象。我们如何实现这一目标。只需在创建块中的每个新对象上放置一个ko.observable

var data = { 
    name: 'Graham', 
    children: [ 
     { id : 1, name : 'Lisa' } 
    ] 
}; 

// Your custom data model 
var myChildModel = function (data) { 
    this.id = data.id; 
    this.name = data.name; 
}; 

var mapping = { 
    'children': { 
     create: function(options) { 
      return new myChildModel(options.data); 
     } 
    } 
}; 

var viewModel = ko.mapping.fromJS(data, mapping); 

documentation

  • 的对象的所有属性被转换为可观察到的。

因此,倒在节中有关使用“创造”它指出

当然,里面的创建回调,你可以做另一个呼叫 ko.mapping.fromJS如果自定义对象的构造你希望。

提供的例子是如下:

var myChildModel = function(data) { 
    ko.mapping.fromJS(data, {}, this); 

    this.nameLength = ko.computed(function() { 
    return this.name().length; 
    }, this); 
} 

自然地,这将转换所有的属性。然后可以将更详细的配置专门应用于该映射调用来处理自定义需求。

简单的回答是使物体的观察到

var myChildModel = function (data) { 
    this.id = ko.observable(data.id); 
    this.name = ko.observable(data.name); 
; 

属性它也可能是最简单的方法,尽管有其他人

简单:

var viewModel = ko.mapping.fromJS(data); 

它做的一切,使两个属性和数组都可观察。此方法的第二个参数仅用于定制目的。如果你不需要,你不必使用它!