私は CakePHP で knockout.js を使用していますが、ノックアウト検証が機能していないようです。私はクロムを使用しており、ノックアウト検証がスクリプトにロードされ、ネットワークタブにも表示されます。また、「インクルード スクリプト」を削除すると、あらゆる種類のエラーが発生するので、インクルードされていることがわかります。
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で順次ロードする必要がありました。