我有一个viewModel,它有这个observableArray
(function () {
function myItems() {
var self = this;
self.itemArray = ko.observableArray();
somefunction() {...
}
var myViewModel = new myItems();
此observableArray将包含以下实例:
(function () {
function item() {
var self = this;
self.name = ko.observable("some data");
self.doStuff = function () {
return "doing whatever";
};
}
window.item = item
}());
我将json映射到viewModel
var json = '{"name":"my main property", "itemArray": [ { "name": "Bob" }, { "name" : "Fred" } ] }';
var myViewModel = new myItems();
ko.mapping.fromJSON(state, {}, myViewModel);
如何告诉映射它必须使用item对象映射itemArray?如何在item()和myItems()之间创建链接?
这是一个显示问题的小提琴 http://jsfiddle.net/dexster/hLEMz/7/
答案 0 :(得分:1)
解决方案是使用映射选项的创建回调
var mapping = {
'itemArray': {
create: function (options) {
//add items to the items object here
...
答案 1 :(得分:0)
好吧,一旦你将它序列化为JSON来存储状态,你就会回到处理JSON数据之前的位置,以便首先填充你的视图模型。
实际上,这是你遇到的第一个问题,你正在序列化新的viewmodel,如果你在viewmodel上序列化itemArray,那么你将获得你开始使用的数据:
var unmapped = ko.mapping.toJSON(myViewModel1.itemArray);
然后,您可以将其传递给addItems方法:
myViewModel2.addItems(unmapped);
而不是映射它们。
这是更新后的jsFiddle