创建observableArrays的元素作为observables(深度映射)

时间:2012-11-27 21:45:19

标签: knockout.js knockout-mapping-plugin

我是地图插件的新手,并认为我遗漏了一些明显的东西。

如何让ko.mapping'深度'创建可观察数组的成员作为observables本身?我在文档中看过'创建回调'和'选项',但看不到任何明显的东西。

我有一个很大的对象模型,因此不希望手动绑定viewModel。另外,作为一个副问题,也需要动态添加元素作为可观察对象。

HTML

<p>
    here, ko.mapping succesfully creates an observable...<br/>
    <input data-bind="value:someText, valueUpdate:'afterkeydown'"></input>
</p>

<p>
    however, here, the contents of the observable array are not observables...</br>    
    <span data-bind="foreach: { data: years, as: 'year' }">

   <input data-bind="value:year, valueUpdate:'afterkeydown'"></input>

    <br />
    </span>
    <button data-bind="click:function(){addYear();}">add</button>
</p>

<p><br /><br /><div data-bind="text: ko.toJSON($root)"></div></p>

的javascript

var model={    
    someText: 'Hello',        
    years:[2000,2001,2002]
};

var viewModel = ko.mapping.fromJS(model);
viewModel.addYear=function(){viewModel.years.push(ko.observable(""));}
ko.applyBindings(viewModel);

Here's一个jsFiddle链接

非常感谢你的帮助,

DS

1 个答案:

答案 0 :(得分:3)

我不得不将您的数组更改为属性数组而不仅仅是数字。如果您只有一个数组编号,则映射插件不会将它们转换为可观察数据。

var model={    
    someText: 'Hello',        
    years:[{item:2000},{item:2001},{item:2002}]
    };

请参阅Updated Fiddle