【发布时间】:2013-03-25 16:35:48
【问题描述】:
我有一个复杂的对象,我想传递给ko.mapping.fromJS,我的问题是我只希望一个字段是可观察的,但根据我尝试过的方法,其他属性要么为空,要么不存在.
我创建了一个 jsFiddle here 来说明我的问题。我希望简单地复制内部对象,因为我不需要它是可观察的;考虑到我将拥有的这些数量,我不想要额外的开销。
这样做的目的是使qty 可编辑,但inner.name 在文本框中保持不变。这意味着一个是可观察的,而另一个不是。
如果有人有另一种不涉及映射的方法,我很乐意听到。我的视图模型有很多函数等,数据来自 AJAX 调用。
function viewModel() {
var self = this;
self.slots = ko.observableArray([]);
self.load = function() {
ko.mapping.fromJS(
[
{ 'qty': 1, 'inner': { 'name': 'thing'} },
{ 'qty': 2, 'inner': { 'name': 'stuff'} }
],
{ 'include': ['qty'], 'ignore': ['inner.name'] },
self.slots);
}
};
ko.applyBindings(new viewModel());
<button data-bind="click: load">Go</button>
<ul data-bind="foreach: slots">
<li>
<span data-bind="text: qty"></span> <span data-bind="text: inner.name"></span><input data-bind="value: qty" /><input data-bind="value: inner.name" />
</li>
</ul>
【问题讨论】:
标签: javascript jquery knockout.js knockout-mapping-plugin knockout-2.0