2016-02-29 46 views
0

我有一個下列用例:檢查是否顯示與當前ViewModel關聯的DOM?

  • 我創建淘汰賽自定義組件:

    ko.components.register("detail", { 
        template: {require: "text!components/detail.html"}, 
        viewModel: DetailViewModel 
    }); 
    
  • DetailViewModel裏面,我執行一些如XHR需要60秒才能完成。如果XHR失敗,我會向用戶顯示通知。現在

我的問題是,XHR需要60秒,而它仍然是「待定」,用戶導航到不再包含「詳細」組件,然後將XHR失敗的頁面。我不想在這種情況下顯示任何通知,只是因爲如果原始組件不再顯示,就沒有用來顯示故障通知。

有沒有一種方法可以確定DetailViewModel函數內部的相關DOM元素是否仍然存在於頁面上?現在我正在使用虛擬機的一些自定義屬性(「isVisible」)並將屬性更改爲DetailViewModel.prototype.dispose中的false,但我想知道在沒有聲明任何自定義屬性的情況下是否有更簡單/更清晰的方法來執行此操作?

回答

0

您可以在接收componentInfo作爲第二個參數的組件註冊中使用「createViewModel」處理程序。 「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"} 
}); 
相關問題