2011-08-26 87 views
0

我有一些asp代碼,我在單獨的jQueryUI選項卡上有一組Telerik網格,我懶加載網格數據,以便網格只綁定到實時數據,如果你實際上查看包含它們的選項卡。重新綁定會導致ajax回發,並且在請求返回後,我添加了一個endRequest處理程序以重新應用jQueryUI格式。這可以在Firefox,Chrome,Safari和IE中使用。但在iPad上,endRequest處理程序永遠不會觸發。有關如何解決此問題的任何建議?ajax add_endRequest永遠不會觸發,只在iPad上

我的代碼如下:

<script language="javascript" type="text/javascript"> 
    (function ($, Sys) { 
     function setUpEmsDashboard() { 
      $('#emsDashboard').dnnTabs().dnnPanels(); 

      $('#dInvoiceLink').click(function() { 
       lazyLoadOutstandingInvoicesGrid(); 
      }); 

      if ($('#dInvoice').is(':visible')) { 
       lazyLoadOutstandingInvoicesGrid(); 
      } 

      $('#dCountsForStaffLink').click(function() { 
       lazyLoadCountsForStaffGrids(); 
      }); 

      if ($('#dCountsForStaff').is(':visible')) { 
       lazyLoadCountsForStaffGrids(); 
      } 
     } 

     $(document).ready(function() { 
      setUpEmsDashboard(); 
      Sys.WebForms.PageRequestManager.getInstance().add_endRequest(function() { 
       setUpEmsDashboard(); 
      }); 
     }); 
    } (jQuery, window.Sys)); 
</script> 
<telerik:RadCodeBlock ID="RadCodeBlock1" runat="server"> 
    <script language="javascript" type="text/javascript"> 
     function lazyLoadOutstandingInvoicesGrid() { 
      var grid = $find("<%=OutstandingInvoicesGrid.ClientID%>"); 
      var masterTableView = grid.get_masterTableView(); 
      var name = masterTableView.get_name(); 
      if (name == 'Temp Data') { 
       masterTableView.rebind(); 
      } 
      return true; 
     } 

     function lazyLoadCountsForStaffGrids() { 
      var countsBySalesRegionGrid = $find("<%=CountsBySalesRegionGrid.ClientID%>"); 
      var cbsrMasterTableView = countsBySalesRegionGrid.get_masterTableView(); 
      var cbsrName = cbsrMasterTableView.get_name(); 
      if (cbsrName == 'Temp Data') { 
       cbsrMasterTableView.rebind(); 
       return true; 
      } 
      var countsBySupplierTypeGrid = $find("<%=CountsBySupplierTypeGrid.ClientID%>"); 
      var cbstMasterTableView = countsBySupplierTypeGrid.get_masterTableView(); 
      var cbstName = cbstMasterTableView.get_name(); 
      if (cbstName == 'Temp Data') { 
       cbstMasterTableView.rebind(); 
       return true; 
      } 
      var countsByCategoryGrid = $find("<%=CountsByCategoryGrid.ClientID%>"); 
      var cbcMasterTableView = countsByCategoryGrid.get_masterTableView(); 
      var cbcName = cbcMasterTableView.get_name(); 
      if (cbcName == 'Temp Data') { 
       cbcMasterTableView.rebind(); 
      } 
      return true; 
     } 
    </script> 
</telerik:RadCodeBlock> 

回答

0

沒關係,我發現這個問題。我所遇到的是一些競爭條件,在某些情況下,某些瀏覽器的網格對象爲空。

我改變:

function lazyLoadOutstandingInvoicesGrid() { 
     var grid = $find("<%=OutstandingInvoicesGrid.ClientID%>"); 
     var masterTableView = grid.get_masterTableView(); 
     var name = masterTableView.get_name(); 
     if (name == 'Temp Data') { 
      masterTableView.rebind(); 
     } 
     return true; 
    } 

到:

function lazyLoadOutstandingInvoicesGrid() { 
     var grid = $find("<%=OutstandingInvoicesGrid.ClientID%>"); 
     if (typeof (grid) !== 'undefined' && grid != null) { 
      var masterTableView = grid.get_masterTableView(); 
      var name = masterTableView.get_name(); 
      if (name == 'Temp Data') { 
       masterTableView.rebind(); 
      } 
      return true; 
     } 
    } 

...並作出其它功能類似的變化。這阻止了已經默默導致主函數的其餘部分失敗的對象引用錯誤。現在它一直工作。

相關問題