如何在knockout可观察数组中创建对象属性是可观察的?

Var*_*har 6 knockout-mapping-plugin knockout.js

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

在这个来自淘汰文档的例子中,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);
Run Code Online (Sandbox Code Playgroud)

Ori*_*eil 1

根据文档

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

因此,在有关使用 \xe2\x80\x9ccreate\xe2\x80\x9d 自定义对象构造的部分中它指出

\n\n
\n

当然,如果您愿意,您可以在 create 回调中再次调用 ko.mapping.fromJS 。

\n
\n\n

提供的示例如下:

\n\n
var myChildModel = function(data) {\n  ko.mapping.fromJS(data, {}, this);\n\n  this.nameLength = ko.computed(function() {\n    return this.name().length;\n  }, this);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n