gpt4 book ai didi

knockout.js - knockout 映射-使用嵌套对象自定义创建

转载 作者:行者123 更新时间:2023-12-04 03:12:19 24 4
gpt4 key购买 nike

我遇到了KnockoutJS的映射插件的问题,需要执行以下操作:

  • 定制对象
  • 的映射创建
  • 自定义#1中嵌套对象数组的映射创建。

  • 在此 fiddle example中,我尝试将子级正确映射到其自定义创建中。预期结果是每个子级都具有添加的description属性。从 fiddle 中,结果应显示为:
  • 亚当·史密斯
  • Bob是5岁
  • Chris是7岁

  • 我可以在此 fiddle example中演示预期的行为。注意,在这段代码中,我必须有两个数据集,第一个数据集有一个空的子对象数组。以下代码行将导致子对象的自定义创建:
    ko.mapping.fromJS(additionalData, parentMapping, viewModel);

    不幸的是,这既需要拥有空的初始子代,又需要两次映射。这是 Not Acceptable ,因为现实中的代码具有更深的层次结构。

    除了上述内容,我还尝试在parentMapping中添加以下代码:
    var mapping = { 'ignore': ["children"] };
    var innerModel = ko.mapping.fromJS(options.data, mapping);
    //for brevity
    innerModel.children = ko.mapping.fromJS(options.data.children, childMapping);

    这具有在初始映射上映射子对象的效果。但是,所有后续映射的children属性都将被忽略。

    有没有一种方法可以使用Knockout映射自定义创建父对象和子对象的方法?

    谢谢你。

    最佳答案

    http://jsfiddle.net/5cfa3/23/

    var viewModel = {};

    var data = {
    id: "1",
    firstName: 'Adam',
    lastName: "Smith",
    children: [ {id: "2", name: "Bob", age: 5}, {id: "3", name: "Chris", age: 7 }]
    };

    var Parent = function(data){
    ko.mapping.fromJS(data, mapping, this)
    };

    var mapping = {
    create:function(options){
    var parent = new Parent(options.data);
    parent.fullName = ko.computed(function(){
    return parent.firstName() + " " + parent.lastName();
    });
    return parent;
    },
    'children': {
    create: function(options) {
    options.data.description = ko.computed(function(){
    return options.data.name + " is " + options.data.age + " years old ";
    });
    return ko.mapping.fromJS(options.data);
    }
    }
    };

    viewModel = ko.mapping.fromJS(data, mapping);

    ko.applyBindings(viewModel);

    关于knockout.js - knockout 映射-使用嵌套对象自定义创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15526417/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com