0

我正在尝试使用淘汰赛映射插件,除了一部分外,我的工作正常。

我有一个对象数组,我希望数组是可观察的,但我不希望数组中的对象此时是可观察的。

例如:

主要的

  • 标签[]

标签

  • 标题
  • ID
  • 视窗[]

窗户

  • 标题
  • ID
  • 地点
  • ETC

    var MainMapping = {
      'Tabs': {
        create: function(options) {
            return ko.mapping.fromJS(options.data, {'ignore': ['Id']}, model.tab);
        }
      }
    };
    

我希望它没有任何 Window 属性是可观察的,但我希望 Windows 数组是。

谁能给我一些关于如何做到这一点的提示?

4

2 回答 2

0

映射插件具有复制选项,它使用复制的值创建 JS 属性(即,我认为您不能将 'Window.Title' 作为顶级视图模型的属性映射,尽管请随意尝试! ),这听起来像你所追求的。但是,由于它是一个孩子,我不确定它是否会起作用,所以您可能想查看创建映射,您可以在其中完全控制映射,您可以直接将窗口数据对象复制到 Windows 数组中,否则也使用映射插件,并在其上使用复制映射。

于 2013-03-14T17:57:47.240 回答
0

这是我想出的答案:

var Main = function() {
    return { ....}
}();

var mainMap = {
    'Tabs':{
        create:function(options){
            return new Tab(options.data);
        }
    }
};

function Tab(data){
    var defaults = { ...}
    data = $.extend(true, defaults, data);

    var tabMap = {
        'copy': ['id'],
        key: function(data) {
            return ko.utils.unwrapObservable(data.id);
        },
        'windows': {
            create: function(options) {
                return new myWindow(options.data);
            }
        }
    };

    ko.mapping.fromJs(data, tabMap, this);
}

function myWindow(data){
    var defaults = { ....};
    return $.extend(true, defaults, data);
}

ko.mapping.fromJS(data, mainMap, Main);
ko.applyBindings(Main, $('#Main')[0]);
于 2013-03-15T17:26:18.350 回答