【发布时间】:2011-08-05 20:55:40
【问题描述】:
使用 knockout.js,是否可以从服务器绑定到 JSON 对象的子对象的属性?具体来说,如果我从服务器获得一个看起来像这样的对象:
var obj = {
list: [ { key: "a", value: 1 },
{ key: "b", value: 2 },
{ key: "c", value: 3 }
],
selected: {
key: "",
value: null
}
};
我通过“映射”插件从这个 javascript 对象创建了一个 viewModel:
var viewModel = ko.mapping.fromJS(obj);
我将list 绑定到<select> 标签,如下所示:
<select data-bind="options: list, optionsText: 'key',
optionsValue: 'value',
value: selected">
</select>
我已将值指定为我的 viewModel 的 selected 属性。这意味着,在选择一个选项后,我可以在代码中成功查询viewModel.selected.key() 和viewModel.selected.value() 并获取最新值。
但是,我无法绑定所选项目的 key 或 value 数据以显示在跨度上。例如,这不会显示我选择的值:
<span data-bind="text: selected.value"></span>
我可以做我想做的事吗?我是否需要使用真正简单的模板来建立适当的上下文(即:selected)?
我有一个here 的例子。我什至尝试将子 selected 对象专门映射为可观察对象,但没有运气(请参阅注释掉的映射调用以及其他选项)。
【问题讨论】: