knockout.js – Knockout Mapping – 使用嵌套对象自定义创建

前端之家收集整理的这篇文章主要介绍了knockout.js – Knockout Mapping – 使用嵌套对象自定义创建前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到了一个与KnockoutJS的映射插件的问题,我需要执行以下操作:

>自定义对象的映射创建
>自定义#1中嵌套对象数组的映射创建.

在这个fiddle example中,我试图让孩子们正确地映射到他们的定制创作.预期的结果是每个孩子都有附加的描述属性.从小提琴,结果应该是:

亚当·史密斯
> Bob年龄5岁
> Chris年龄7岁

我可以在这个fiddle example中演示预期的行为.请注意,在这段代码中,我必须有两个数据集,第一个数据集有一个空数组的子对象.以下代码行将导致子对象的自定义创建:

ko.mapping.fromJS(additionalData,parentMapping,viewmodel);

不幸的是,这需要两个空的初始孩子和映射两次.这是不可接受的,因为现实中的代码具有更深层次的层次.

除了上述之外,我已经尝试在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 Mapping自定义父对象和子对象的创建?

谢谢.

解决方法

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

猜你在找的JavaScript相关文章