我不确定我是否了解您的确切目标,但当遇到此类问题时,Knockout 将停止绑定。
如果您的问题只是未定义的变量,那么您可以使用的一个技巧是绑定$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/