我希望结合使用KnockoutJS图书馆,Knockout.Mapping插件和Knockout-Validation插件来显示用户可以操作的一些数据。
我的数据作为AJAX调用的嵌套对象而来,我通过映射插件运行该数据来创建Knockout视图模型,使用ko.mapping.fromJS中的映射选项对象自定义验证规则。 / p>
我成功地在第一层获取对象(下面的小提琴中的名称),如果该字段为空则显示消息,但是嵌套的对象(IntroData.PlanName)不显示验证消息。我是否需要为这些嵌套对象设置不同的映射对象?
ViewModel(我的AJAX调用中的内容示例):
var stuff = {
IntroData: {
PlanName: 'Test'
},
name: 'tes2s3t'
};
映射:
var validationMapping = {
IntroData: {
PlanName: {
create: function (options) {
return ko.observable(options.data).extend({
required: true
});
}
}
},
name: {
create: function (options) {
return ko.observable(options.data).extend({
required: true
});
}
}
};
联播:
ko.validation.init({
registerExtenders: true,
messagesOnModified: true,
insertMessages: true,
parseInputAttributes: true,
messageTemplate: null,
grouping: {
deep: true
}
}, true);
window.viewModel = ko.validatedObservable(ko.mapping.fromJS(stuff, validationMapping));
ko.applyBindings(window.viewModel);
小提琴:http://jsfiddle.net/odxv53g9/5/
谢谢!
答案 0 :(得分:0)
文档不清楚,但显然ko.mapping.fromJS()
忽略了嵌套映射,因此PlanName的“create”方法永远不会被调用。
您可以为IntroData添加显式映射:
IntroData: {
create: function (options) {
var nestedMapping = {
PlanName: {
create: function (options) {
return ko.observable(options.data).extend({
required: true
});
}
}
}
return ko.mapping.fromJS(options.data, nestedMapping);
}
}
这是一个工作小提琴:http://jsfiddle.net/odxv53g9/6/