1

我正在使用带有 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 顺序加载它们。

4

0 回答 0