Knockout.js 如何使用KnockoutJS和映射插件观察子对象?

Knockout.js 如何使用KnockoutJS和映射插件观察子对象?,knockout.js,mapping,viewmodel,Knockout.js,Mapping,Viewmodel,使用这样的JSON: JSON字符串 问题是:我如何告诉映射插件SelectedOption属性是ko.observable 客户端代码 我写了一个JSFIDLE来说明这个问题 您必须提供一个自定义映射,以向映射函数指示它应该如何操作。我已经更新了你的密码 以下是自定义映射以及对ko.mapping的更改调用: var mapping = { 'SelectedOption': { create: function(options) { retur

使用这样的JSON:

JSON字符串

问题是:我如何告诉映射插件SelectedOption属性是ko.observable

客户端代码

我写了一个JSFIDLE来说明这个问题

您必须提供一个自定义映射,以向映射函数指示它应该如何操作。我已经更新了你的密码

以下是自定义映射以及对ko.mapping的更改调用:

var mapping = {
    'SelectedOption': {
        create: function(options) {
            return ko.observable(options.data);
        }
    }
}

var viewModel = ko.mapping.fromJSON(_json, mapping);
然后,在HTML中,您必须将字符添加到SelectedOption,因为它现在是可观察的,如下所示:

<span data-bind="text: SelectedOption().ID"></span>

您必须提供一个自定义映射来向映射函数指示它应该如何做。我已经更新了你的密码

以下是自定义映射以及对ko.mapping的更改调用:

var mapping = {
    'SelectedOption': {
        create: function(options) {
            return ko.observable(options.data);
        }
    }
}

var viewModel = ko.mapping.fromJSON(_json, mapping);
然后,在HTML中,您必须将字符添加到SelectedOption,因为它现在是可观察的,如下所示:

<span data-bind="text: SelectedOption().ID"></span>

谢谢那么具有这样属性的对象数组呢?你知道吗?你是说一系列可选择的选项?如果是这样的话,您可以返回一个用ko.utils.arrayMap映射的ko.observable数组,而不是返回一个ko.observable数组。@Tocco我用一个observable数组更新了另一个版本的fiddle,允许您选择多个选项,这样您就可以查看它是如何实现的:不,我是指包含这样的对象的ko.observable数组:{ID:9,选择选项:{ID:1,名称:一}…我想观察每个数组对象的SelectedOption属性。@Tocco是的,你可以,这与我在更新的fiddle中所做的非常相似。谢谢。那么一个具有这样属性的对象数组呢?你知道吗?你是指一个可选选项的数组吗?如果是这样的话,你可以不返回ko.observable,而返回一个ko.observableeturn一个用ko.utils.arrayMap映射的ko.observableArray,我猜。@Tocco我用一个可观察数组更新了你的小提琴的另一个版本,允许你选择多个选项,这样你就可以检查它是如何实现的:不,我是说一个包含如下对象的ko.observableArray:{ID:9,SelectedOption:{ID:1,Name:One}…我想观察每个数组对象的SelectedOption属性。@Tocco是的,你可以,这与我在更新的fiddle中所做的非常相似。一个复杂对象的工作示例引用了这个答案,我回答了类似的问题[这里][1][1]:一个复杂对象的工作示例参考此答案,我已经回答了类似的问题[此处][1][1]: