我正在使用带有 CakePHP 的 knockout.js,但我似乎无法让淘汰赛验证工作。我正在使用 chrome,并且在脚本中加载了淘汰赛验证,并且还显示在网络选项卡中。此外,当我删除“包含脚本”时,我会遇到各种错误,所以我知道它被包含在内。
我有一个名为 ReserveViewModel 的视图模型。这是我要验证的输入示例。我没有收到任何错误,它只是没有标记任何内容。
ko.validation.configure({
registerExtenders: true,
messagesOnModified: true,
insertMessages: true,
parseInputAttributes: true,
messageTemplate: null
});
function ReserveViewModel(){
var self = this;
self.firstName = ko.observable("").extend({ required: true })
.extend({ minLength: 3 })
.extend({ pattern: {
message: 'Please enter your first name',
params: '^[a-zA-Z]'
}});
//button to continue to another div with more options
self.continue = function(){
self.errors = ko.validation.group(self);
if (self.errors().length == 0) {
alert('Error found');
}
}
}
ko.validation.registerExtenders();
ko.applyBindings(new ReserveViewModel());
当我单击“继续”按钮并且 firstName 输入为空白时,它仍然继续。我尝试发出警报self.errors().length
并导致以下错误
function m(){if(0<arguments.length){if("function"===typeof r)r.apply(c,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}l||e();a.q.bb(m);return k}
如果它有所作为,我将通过 CakePHP 的 AJAX 调用加载此内容。会不会有什么影响?会不会是某种封闭?
编辑我让它工作
我最终使用 jQuery 来检索所有必要的脚本。然后我会使用 AJAX 来填充 div。在我通过 AJAX 检索的页面上,我包含了 ViewModel 文件。
由于文件在不同时间加载,这是一个奇怪的混淆,所以我只需要使用 jquery 顺序加载它们。