Backbone.js的Ajax在Chrome和Firefox中调用不同的行为

时间:2016-07-26 17:23:50

标签: javascript jquery ajax backbone.js

我在Firefox中面临一个奇怪的问题。我们正在加载一个页面,同时调用Routers.initializeRouters();发送ajax请求以获取数据,并将loadFormSuccessHandler函数填充到视图中。

如果是Chrome,Ajax请求会等待初始化视图,然后使用ajax响应将数据填充到视图中。

对于Firefox,Ajax请求获取数据并开始填充视图,但由于某些视图仍未初始化,因此失败了。

如何在填充数据之前通知ajax请求等待视图初始化。

任何指针都会有所帮助。

Main.js

var Main = {

    treeView : null,
    formView : null,
    mainTabBarView : null,
    currentFieldView : null,
    designModeViewPointer : null,
    carousel : null,
    advancedControlsView : null,

    renderUI : function() {
        Templates.loadTemplateList();
        Utility.initializeFieldHandlerMap();
        Views.showBody();
        Routers.initializeRouters();
        var form = new Models.Form();
        this.formView = Views.showForm('formDetailsDiv', form);
        this.treeView = new Views.TreeView({
            el : $('#controlsTreeDiv'),
            model : null
        });

        this.treeView.getTree().attachEvent("onDblClick",
                ControlBizLogic.formTreeNodeClickHandler);

        Main.mainTabBarView = new Views.TabBarView({
            el : $('#csdOperationsContainer'),
            model : null
        });
        Views.showControlTab('control');
        this.carousel = $('#controlTypesSlider');
        this.carousel.tinycarousel();
        Main.advancedControlsView = new Views.AdvancedPropertiesTabView({
            el : $('#advancedControlProperties'),
            model : null
        });
        // init design mode
        Main.designModeViewPointer = new Views.DesignMode({
            el : $("#design")
        });
        Routers.designModeOnBeforeDragEvent();
        Routers.designModeOnDragEvent();

    }
}

Main.renderUI();

带有ajax呼叫响应的方法

loadForm : function(_id, edit) {
                    $("#formWaitingImage").show();
                    if (Main.formView == null) {
                        Main.formView = Views.showForm('formTab',
                                new Models.Form({
                                    "id" : _id
                                }));

                    }
                    Main.formView.getFormModel().set({
                        id : _id
                    });
                    GlobalMemory.editForm = (edit == "true");
                    Main.formView.getFormModel().fetch({
                        url : 'csdApi/form/' + _id + "/" + edit,
                        success : this.loadFormSuccessHandler
                    });
                    // save as
                },

loadFormSuccessHandler : function(model, response) {
                    var formId = model.get('id');
                    if (formId != undefined && formId != null) {
                        GlobalMemory.editForm = true;
                    }
                    Routers.formEventsRouterPointer.updateUI(model);
                    Routers.formEventsRouterPointer.loadFormulae(Main.formView
                            .getFormModel(), "", "");

                    AdvancedControlPropertiesBizLogic
                            .loadSkipRules(Main.formView.getFormModel());
                    Main.formView.getFormModel().set({
                        skipRules : model.get('skipRules'),
                        id : model.get('id')
                    });
                    Main.advancedControlsView.setTableCss('formulaTable');
                    // Main.mainTabBarView.loadFormSummary();
                    Main.mainTabBarView.getFormSummaryView().displayFormInfo(
                            model.getFormInformation());

                    $("#formWaitingImage").hide();
                    // save form

                    if (!GlobalMemory.editForm) {

                        $('#saveForm').prop("value", " Save As ")
                    }
                },

1 个答案:

答案 0 :(得分:0)

此问题与特定的firefox版本有关,并且已在下一个firefox版本中修复。