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