我有一个在Internet Explorer和Chrome中测试过的错误,并且这只发生在Internet Explorer中。在Internet Explorer 11中给出错误绑定上下文的敲除组件
我使用的是Knockout-3.3.0
和Knockout Validation
。
我有一个使用类似下面的自定义元件的敲除组分:
<div>
...
<div data-bind="with: editableUser">
<div data-bind="visible: !$parent.editMode">
<user-picker params="value: $parent.user, multiple:false, hideSelection:true"></user-picker>
</div>
</div>
...
</div>
定制元件是如上所示我的视图模型的一部分的其它节点的后代。
的脚本页面依赖关系和视图模型绑定被应用,如下所示:
<script src="/Scripts/knockout-3.3.0.debug.js"></script>
<script src="/Scripts/knockout.validation.js"></script>
<script src="/Scripts/CustomBindings.js"></script>
<script>
$(function() {
ko.validation.init({
insertMessages: false,
decorateInputElement: false,
errorElementClass: "has-error has-feedback",
decorateElementOnModified: true
});
});
</script>
<script src="/Scripts/UserPicker.js"></script>
<script src="/Scripts/UserModel.js"></script>
<script src="/Scripts/CustomComponents.js"></script>
<script type="text/javascript">
var userModel;
$(function() {
var userRepository = new MyModule.UserRepository();
userModel = new MyModule.UserModel(userRepository);
ko.applyBindings(userModel);
});
</script>
在脚本之前的MVC部分呈现组件的模板;如下所示:
<template id="user-picker-template">
<div class="user-picker"> ... </div>
</template>
该组件在CustomComponents.js
中注册,如图所示。
ko.components.register('user-picker', {
template: { element: 'user-picker-template' },
viewModel: MyModule.UserPicker
});
我也有CustomBindings.js
文件中的自定义挖空绑定。
当调试敲除在此函数applyBindingsToNodeInternal
发生在这条线的错误:ko.applyBindings
呼叫期间抛出
var initResult = handlerInitFn(node, getValueAccessor(bindingKey), allBindings, bindingContext['$data'], bindingContext);
JavaScript错误。
的错误是在user-picker-template
内侧的第一结合属性未定义,这是因为所使用的bindingContext
不正确,userModel
被传递,而不是UserPicker
。
由于错误,其余与非组件相关的绑定完成,然后user-picker
绑定之后正确完成,但由于javascript错误,我的点击事件上的一些回调代码不起作用。
在Chrome中对此进行调试时,用户选取器的绑定将被忽略,直到userModel
被绑定。
有谁知道什么可能会导致此错误?
这固定它,谢谢。我在回调不起作用时遇到的问题实际上最终是由于IE缓存了一个json获取请求,但这种更改至少有助于摆脱任何javascript错误。 – Pricey 2015-04-02 08:30:21