【问题标题】:Child collection mapping not firing子集合映射未触发
【发布时间】:2014-06-13 15:47:43
【问题描述】:

我使用了搜索引擎,找到了很多答案,但我遇到了一个问题。问题是子集合映射似乎没有触发。在下面的代码中,警报“已创建组”,但显示了“已创建根”-警报。

var mapping = {
    'Groups': {
        create: function (options) {
            var lang = ko.observable(ko.mapping.fromJS(options.data));
            alert('Groups created');
            return lang;
        }
    },
    create: function (options) {
        var innerModel = ko.mapping.fromJS(options.data);
        alert('Root created');
        innerModel.ajaxSave = submitFormWithAjax;
        return innerModel;
    }
}

var viewModel = null;
function loadViewModel(model, offlineCache, key) {
    viewModel = ko.mapping.fromJS(model, mapping);

    if (typeof extendViewModel == 'function') {
        extendViewModel();
    }

    ko.applyBindings(viewModel);
}

我的 json 数据看起来像这样

{
  "Groups": [
    {
      "Texts": [
        {
          "Language": {
            "Id": 1,
            "Name": "English",
            "Lcid": 2057
          },
          "Id": 1,
          "Value": "Display name"
        },
        {
          "Language": {
            "Id": 2,
            "Name": "Swedish",
            "Lcid": 1053
          },
          "Id": 2,
          "Value": "Visningsnamn"
        }
      ],
      "Id": 1,
      "InternalName": "3dc075e3-ff96-4044-b9bb-4a0404912866",
      "DisplayName": "Display name"
    }
  ],
  "AvailableLanguages": [
    {
      "Id": 1,
      "Name": "English",
      "Lcid": 2057
    },
    {
      "Id": 2,
      "Name": "Swedish",
      "Lcid": 1053
    }
  ]
}

为什么我的网上论坛创建的警报会被触发?

【问题讨论】:

    标签: knockout.js twitter-bootstrap-3


    【解决方案1】:

    由于某种原因,您不能使用映射插件在多个级别上创建函数,您可以这样做

    RootViewModel = function(data) {
       this.stuffAddedToViewModelBeforeMapping = "Hej på dig";
    
       var mapping = {
           Groups: {
               create: function(options) {
                   return new GroupViewModel(options.data);
               }
           },
           AvailableLanguages: {
               create: function(options) {
                   return new LanguageViewModel(options.data);
               }
           }
       };
       ko.mapping.fromJS(data, mapping, this);
    };
    
    LanguageViewModel = function(data) {
        ko.mapping.fromJS(data, {}, this);
    }
    
    GroupViewModel = function(data) {
        ko.mapping.fromJS(data, {}, this);
    };
    

    http://jsfiddle.net/42ZwC/

    Lycka 直到!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多