传递给create的选项有无效的父级?

时间:2014-06-09 14:23:34

标签: knockout.js knockout-mapping-plugin

我尝试将Knockout.mapping与Knockout.validation结合使用来创建一个简单的验证视图模型。我在create中遇到了ko.mapping函数并认为这符合我的需求,但似乎options.parent属性未设置为我期望的内容:

这是我使用的基本代码,或者您可以看到JSFiddle

var o = {
    test: {
        value: "bob",
        validation: "{ required: true; }"
    }
};
var mapping = {
    'value': {
        create: function (options) {
            console.log(options.parent === o.test);
        }
    }
};

var vm = ko.mapping.fromJS(o, mapping);

我做错了什么,或者这是一个错误?我的最终目标是我想在创建中按以下方式调用:

create: function(options) {
   var result = ko.mapping.fromJS(options.data);
   if(options.parent.validation !== undefined) {
       result.extend(options.parent.validation); 
   }

   return result;
}

如果这只是破了,任何人都可以想到围绕这个问题的任何相对简单的方法吗?到目前为止我唯一提出的解决方案是递归属性搜索,以手动扩展可观察量,这会感觉很多不必要的复杂性。

2 个答案:

答案 0 :(得分:1)

我在项目中所做的是添加id来检查父级,如下所示:

var o = {
    test: {
        id: "1",
        value: "bob",
        validation: "{ required: true; }"
    }
};
var mapping = {
    'value': {
        create: function (options) {
            console.log(options.parent.id() === o.test.id);
        }
    }
};

测试 here

答案 1 :(得分:0)

最好创建显式ViewModel,然后使用映射插件填充它们,如

ViewModel = function(data) {
   this.value = ko.observable().extend({ required: true });
   ko.mapping.fromJS(this, {}, data);
};