传入ko.mapping.fromJS的复杂对象
Complex Object passed into ko.mapping.fromJS
我有一个复杂的对象,我想传递到ko.mapping.fromJS
和我的问题是,我只希望一个字段是可观察的,但其他属性遇到null或不存在基于我尝试过的方法。
这样做的目的是使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>
你需要使用copy
而不是ignore
,因为你想在那里有属性而不是可观察的。
因为你直接映射了一个数组映射配置就变得有点复杂了。
不能在"root"级别定义copy
,因为数组位于根。所以你必须为项目提供一个create
函数在create函数中,你现在可以为项目的属性指定copy
选项:
ko.mapping.fromJS(
[
{ 'qty': 1, 'inner': { 'name': 'thing'} },
{ 'qty': 2, 'inner': { 'name': 'stuff'} }
],
{
create: function (options) {
return ko.mapping.fromJS(options.data, {
copy: ['inner.name']
})
}
},
self.slots);
演示JSFiddle。
相关文章:
- 将复杂对象从angular js传递到web api,它总是返回404
- 添加到序列化数组中的复杂对象在服务器端始终为 null
- 如何在 jQuery 中存储复杂对象/Razor 中的数据属性
- 如何将复杂对象从jquery传递到标签<a>
- 使用复杂对象上的删除为选择框手动设置默认值
- angular dons't从复杂对象中选择selectbox选项
- 如何在复杂对象中组织Javascript函数
- QUnit - 如何比较两个复杂对象
- WebDev新手:我应该如何处理将复杂对象从PHP传递到PHP(非连续)
- 如何将内存中的复杂对象写入 nodejs 中的文件
- JSON.stringify 在解析复杂对象时返回空对象
- 如何将复杂对象绑定到剑道调度程序中的字段
- 角度JS并将复杂对象数组作为属性传递给指令
- 将复杂对象传递给 ui-sref 参数
- 我应该如何在javascript中将复杂对象作为字符串保存
- 查看是否定义了复杂对象变量(objectVar.some.other.value)的简单方法
- 使用 REST 和 Javascript 处理复杂对象的最佳实践
- WebSocket JavaScript:发送复杂对象
- 将单选按钮绑定到复杂对象可防止选中
- Javascript 中的复杂对象