2013-10-31 31 views
0

代碼:劍道UI標籤欄MVC - 。數據(「kendoTabStrip」)是未定義的最初

var orderDetailsTabStrip = $('#OrderDetailsTabs').data("kendoTabStrip"); 
orderDetailsTabStrip.select(tabIndexToSelect); 

有試圖引用文檔中的劍道UI分頁列準備好,如果我只是把該呼叫並在當一個問題腳本塊在頁面的底部。我得到一個錯誤:

Cannot call method 'select' of undefined 

如果我換行調用函數與此代碼在任何時間> = 500ms的一個setTimeout的,它的工作原理。所以看起來問題是一些Kendo功能需要在加載頁面期間先完成,然後才能引用tabstrip?

這工作:

setTimeout(function() { selectOrderDetailTab() }, 500); 

我不喜歡這種不肯定算不上什麼這需要等待,如果500ms的總是去上班。很明顯,我可以將這個延遲提高到更高的水平,以確保它始終有效,但是以犧牲用戶的低速性能爲代價。是否有某種類型的Kendo事件表明它何時完成了我可以用作觸發器然後調用我的函數的事情?

回答

1

如果您使用mvc助手,則需要確保上面的代碼(獲取小部件實例)在助手的插入腳本標記之後發生。

幫助程序將腳本標記插入運行文檔準備就緒代碼的頁面中。由於它必然需要確保你的代碼是爲了每個文檔準備處理火災:

  1. 它自己的$(document).ready()函數內
  2. 劍道產生一個
後您的 $(document).ready()功能綁定

實際上這通常意味着你需要的body標籤後運行你的代碼,除非您使用的是.Deferred()輔助選項,在這種情況下,它需要WriteScripts條命令後occure

<body> 
    //kendo inserts your widget 
    <div id="#OrderDetailsTabs"></div> 
    <script> 
     //this is the equivillent to $(document).ready() 
     jQuery(function() { 
      $('#OrderDetailsTabs').kendoTabStrip({ options: "goHere" }); 
     }); 
    </script> 
</body> 
<script> 
     $(document).ready(function(){ 
      var orderDetailsTabStrip = $('#OrderDetailsTabs').data("kendoTabStrip"); 

      orderDetailsTabStrip.select(tabIndexToSelect); 
     }); 
</script>