我有以下用例:
我正在创建Knockout自定义组件:
ko.components.register("detail", {
template: {require: "text!components/detail.html"},
viewModel: DetailViewModel
});
在DetailViewModel
内,我正在执行一些例如XHR需要60秒才能完成。如果XHR失败,我向用户显示有关它的通知。
现在我的问题是XHR需要60秒,当它仍处于“待定”状态时,用户导航到不再包含“detail”组件的页面,然后XHR失败。我不想在这种情况下显示任何通知,只是因为如果不再显示原始组件,则无法显示失败通知。
如果关联的DOM元素仍在页面上“存在”,是否有办法在DetailViewModel
函数内部进行确定?现在我正在使用VM的一些自定义属性(“isVisible
”)并将属性更改为false
中的DetailViewModel.prototype.dispose
,但我想知道是否有更简单/更清洁没有声明任何自定义属性的方法吗?
答案 0 :(得分:0)
您可以使用" createViewModel"组件注册中的处理程序,它接收componentInfo作为第二个参数。 " componentInfo.element"是一个组件的DOMElement。因此,您可以访问它并检查它的可见性。
ko.components.register('detail', {
viewModel: {
createViewModel: function(params, componentInfo) {
var domElement = componentInfo.element;
// You can pass domElement as a parameter for the DetailViewModel
return new DetailViewModel(params);
}
},
template: {require: "text!components/detail.html"}
});