检查是否显示与当前ViewModel关联的DOM?

时间:2016-02-29 08:10:58

标签: javascript knockout.js knockout-3.0

我有以下用例:

  • 我正在创建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,但我想知道是否有更简单/更清洁没有声明任何自定义属性的方法吗?

1 个答案:

答案 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"}
});