【问题标题】:Knockout Mapping an array but not its child properties?Knockout 映射一个数组而不是它的子属性?
【发布时间】:2013-03-14 17:44:39
【问题描述】:

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

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

例如:

主要

  • 标签[]

标签

  • 标题
  • 身份证
  • Windows[]

窗口

  • 标题
  • 身份证
  • 位置
  • var MainMapping = {
      'Tabs': {
        create: function(options) {
            return ko.mapping.fromJS(options.data, {'ignore': ['Id']}, model.tab);
        }
      }
    };
    

我希望所有的 Window 属性都不可观察,但我希望 Windows 数组是。

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

【问题讨论】:

    标签: knockout.js knockout-mapping-plugin


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      这是我想出的答案:

      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]);
      

      【讨论】:

        猜你喜欢
        • 2017-11-19
        • 2012-03-05
        • 2012-12-26
        • 2014-09-24
        • 2015-03-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多