ajax add_endRequest никогда не срабатывает, только на iPad - PullRequest
0 голосов
/ 26 августа 2011

У меня есть некоторый asp-код, в котором у меня есть набор сеток Telerik на отдельных вкладках jQueryUI, и я лениво загружаю данные сетки, чтобы сетки связывались только с действительными данными, если вы действительно просматриваете вкладку, которая их содержит.Повторное связывание вызывает обратную передачу ajax, и я добавил обработчик endRequest для повторного применения форматирования jQueryUI после возврата запроса.Это работает в Firefox, Chrome, Safari и IE.Но на iPad обработчик endRequest никогда не срабатывает.Любые предложения о том, как решить эту проблему?

Мой код выглядит следующим образом:

<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>

1 Ответ

0 голосов
/ 26 августа 2011

Неважно, я нашел проблему.То, что у меня было, - это состояние гонки, когда для некоторых браузеров в некоторых случаях объекты сетки были нулевыми.

Я изменил:

    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;
        }
    }

... и внес аналогичные изменения в другую функцию.Это предотвратило ошибку ссылки на объект, которая молча вызывала сбой остальной основной функции.Теперь это работает последовательно.

...