【问题标题】:Change property type on the fly using Knockout mapping plugin使用 Knockout 映射插件即时更改属性类型
【发布时间】:2012-09-25 04:25:28
【问题描述】:

我需要使用敲除映射插件来动态更新带有 ajax json 数据的对象。但是属性类型发生了变化。例如,我收到如下 json 数据:

{"type" : "A", "output" : "这是 A" }

{“类型”:“B”,“输出”:{“名称”:“B”}}

{“类型”:“C”,“输出”:[“C1”,“C2”,“c3”]}

我在前端有不同的视图模板来根据类型展示我的模型。但问题是 ko.mapping.fromJS(data, {}, viewModle) 不起作用,因为输出类型不固定。如何动态映射它?

【问题讨论】:

    标签: knockout.js mapping knockout-mapping-plugin


    【解决方案1】:

    您可以创建多个表示每种类型的 javascript 对象。 您可以将自定义映射提供给插件,您可以在其中控制对象的创建方式(以及创建的对象类型。

    类似这样的:

    var mapping = {
    create: function(json) {
        if(json.data.Type == 'A'){
            return new YourTypeA();
    
         }  
         //same for your other types
     }
    }
    
    var data = '[{ "Type": "A", "Titel": "Title1", "Description": "Description 1" }, { "Type": "B", "Titel": "Title 2", "Description": "Description 2" }, { "Type": "C", "Titel": "Title     3", "Description": "Description 3"}]';
        ko.mapping.fromJS(eval(data), mapping, viewModel);
    

    希望对你有帮助

    【讨论】:

    • 是的,您的建议可行。但我喜欢二十种不同的类型。手动执行此操作很痛苦。在更新数据时,我可以做些什么来删除“输出”属性并让淘汰赛自动映射它。
    【解决方案2】:

    我自己找到了答案。只需将项目放入数组中,然后映射就可以了。

    data = [{"type" : "A", "output" : "This is A" }]
    ko.mapping.fromJS(data, {}, viewModle)
    data = [{"type" : "B", "output" : {"Name" : "B"}}]
    ko.mapping.fromJS(data, {}, viewModle)
    

    【讨论】:

      猜你喜欢
      • 2012-12-26
      • 2012-01-30
      • 1970-01-01
      • 2013-09-27
      • 2012-12-18
      • 1970-01-01
      • 2015-01-21
      • 1970-01-01
      • 2014-03-04
      相关资源
      最近更新 更多