Javascript KnockoutJS:使用dropdownlists验证多行的问题
所以我试着验证我点击按钮时的两个下拉列表。当下拉列表首次启动时,由于未选择任何内容,因此将使用未定义的值启动下拉列表。这就是我想要的。但是,当我在添加另一行之前单击add按钮验证下拉列表时,验证从未发生 JSJavascript KnockoutJS:使用dropdownlists验证多行的问题,javascript,knockout.js,Javascript,Knockout.js,所以我试着验证我点击按钮时的两个下拉列表。当下拉列表首次启动时,由于未选择任何内容,因此将使用未定义的值启动下拉列表。这就是我想要的。但是,当我在添加另一行之前单击add按钮验证下拉列表时,验证从未发生 JS ko.validation.init({ insertMessages: false, errorMessageClass: "ErrorLine" }); ko.validation.rules['bothUndefined'] = { getValue
ko.validation.init({
insertMessages: false,
errorMessageClass: "ErrorLine"
});
ko.validation.rules['bothUndefined'] = {
getValue: function (o) {
return (typeof o === 'function' ? o() : o);
},
validator: function (val, params) {
var self = this;
var anyOne = ko.utils.arrayForEach(params, function (param) {
if (typeof param === "function") {
return typeof param() === "undefined";
} else {
return (typeof param === "undefined");
}
});
return (typeof anyOne !== "undefined");
},
message: 'Please select one change.'
};
ko.validation.registerExtenders();
function BookPossessionTransferVM() {
var self = this;
.
.
.
self.PossessionChanges = ko.observableArray([]);
self.PossessionChangesErrors = ko.validation.group(self.PossessionChanges(), { deep: true, live: true });
self.PossessionChanges.push(new PossessionChangeVM(self.PossessionChanges().length +1))
.
.
.
self.addPossessionChange = function () {
if (self.PossessionChanges().length < 1) {
self.PossessionChanges.push(new PossessionChangesVM(self.PossessionChanges().length + 1,
self.AllFrom()));
} else {
self.PossessionChangesErrors.showAllMessages();
}
}
}
function PossessionChangeVM(possessionChangeId) {
var self = this;
self.possessionChangeId = ko.observable(possessionChangeId);
self.SelectedFrom = ko.validatedObservable();
self.SelectedTo = ko.validatedObservable();
self.IsValidRow = ko.pureComputed(function() {
return typeof self.SelectedFrom !== "undefined" && typeof self.SelectedTo !== "undefined";
}).extend({
bothUndefined: {
params: [self.SelectedFrom, self.SelectedTo]
}
});
self.ChangeType = ko.pureComputed(function() {
if (self.SelectedFrom() !== undefined && self.SelectedTo() !== undefined) {
return 'Update';
} else if (self.SelectedFrom() === undefined && self.SelectedTo() === undefined) {
return '';
} else if (self.SelectedFrom() === undefined) {
return 'Add';
} else if (self.SelectedTo() === undefined) {
return 'Remove';
} else { return ''; }
});
}
ko.validation.init({
insertMessages:false,
errorMessageClass:“ErrorLine”
});
ko.validation.rules['bothUndefined']={
getValue:函数(o){
返回(typeof o==='function'?o():o);
},
验证器:函数(val,params){
var self=这个;
var any=ko.utils.arrayForEach(参数,函数(参数){
if(参数类型==“函数”){
返回typeof param()=“未定义”;
}否则{
返回(typeof参数==“未定义”);
}
});
返回(任何人的类型!=“未定义”);
},
消息:“请选择一项更改。”
};
ko.validation.registerExtenders();
函数bookOccessionTransferVM(){
var self=这个;
.
.
.
self.positionchanges=ko.observearray([]);
self.PossessionChangesErrors=ko.validation.group(self.PossessionChanges(),{deep:true,live:true});
self.PossessionChanges.push(新的PossessionChangeVM(self.PossessionChanges().length+1))
.
.
.
self.addPossessionChange=函数(){
if(self.positionchanges().length<1){
self.positionchanges.push(新的positionchangesvm(self.positionchanges().length+1,
self.AllFrom());
}否则{
self.positionChangesErrors.showAllMessages();
}
}
}
函数PossessionChangeVM(possessionChangeId){
var self=这个;
self.possessionChangeId=ko.可观察(possessionChangeId);
self.SelectedFrom=ko.validatedObservable();
self.SelectedTo=ko.validatedObservable();
self.IsValidRow=ko.pureComputed(函数(){
返回self.SelectedFrom!=“未定义”&&typeof self.SelectedTo!=“未定义”;
}).延伸({
波顿定义:{
参数:[self.SelectedFrom,self.SelectedTo]
}
});
self.ChangeType=ko.pureComputed(函数(){
if(self.SelectedFrom()!==未定义和self.SelectedTo()!==未定义){
返回“更新”;
}else if(self.SelectedFrom()==未定义和self.SelectedTo()==未定义){
返回“”;
}else if(self.SelectedFrom()==未定义){
返回“添加”;
}else if(self.SelectedTo()==未定义){
返回“删除”;
}else{返回“”;}
});
}
单击“添加”按钮后,我希望positionChangesErrors
会出现一个问题,因为它应该加载未定义的选项。但我什么也得不到。再次感谢你的帮助
编辑:
现在我已经完成了验证,但是一旦选择了一个下拉列表,我就无法清除验证以创建新行。问题是:原来我没有正确的验证逻辑。这是新的修改 伊斯瓦利德罗变成了一个自命不凡的人
self.IsValidRow = ko.pureComputed(function() {
return (!(self.SelectedFrom() === undefined && self.SelectedTo() === undefined))
}).extend({ bothUndefined: {}
});
而验证变得更为重要
ko.validation.rules['bothUndefined'] = {
getValue: function (o) {
return (typeof o === 'function' ? o() : o);
},
validator: function (val) {
return val;
},
message: 'Please select one change.'
};
ko.validation.registerExtenders();