あなたの正確な目標を理解しているかどうかはわかりませんが、Knockout はこの種の問題に遭遇するとバインドを停止します.
問題が単に未定義の変数である場合、使用できるトリックの 1 つ$data.name3
は、単にname3
. 有効なオブジェクトから未定義のプロパティにアクセスしても、エラーは発生しません。
より堅牢なものが本当に必要な場合は、カスタム バインディング プロバイダーの使用を検討できます。
たとえば、次のような実際のバインディング プロバイダーへのクイック ラッパーを作成できます。
var ErrorHandlingBindingProvider = function() {
var original = new ko.bindingProvider();
//determine if an element has any bindings
this.nodeHasBindings = original.nodeHasBindings;
//return the bindings given a node and the bindingContext
this.getBindings = function(node, bindingContext) {
var result;
try {
result = original.getBindings(node, bindingContext);
}
catch (e) {
if (console && console.log) {
console.log("Error in binding: " + e.message);
}
}
return result;
};
};
ko.bindingProvider.instance = new ErrorHandlingBindingProvider();
これにより、エラーがキャッチされ、ログに記録され、続行されます。もちろん、この「悪い」バインディングを持つ要素はバインドされません。それを処理したい既知の方法がある場合は、エラーをキャッチした後にそのロジックを追加できます。その要素 (ノード) と bindingContext を調べて、何をする必要があるかを判断したい場合があります。
サンプル: http://jsfiddle.net/rniemeyer/KxXqs/
更新: これは、バインド構文のエラーと、バインドされた値が実際に評価されるときのエラーをトラップ/ログに記録する 3.0+ のバージョンです。http://jsfiddle.net/rniemeyer/ecbn1dmy/