Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Backbone.js/marionete-更新区域触发无限循环,页面刷新_Javascript_Backbone.js_Marionette - Fatal编程技术网

Javascript Backbone.js/marionete-更新区域触发无限循环,页面刷新

Javascript Backbone.js/marionete-更新区域触发无限循环,页面刷新,javascript,backbone.js,marionette,Javascript,Backbone.js,Marionette,我不完全确定这里发生了什么。我有一个模块,负责在页面的某个区域显示导航。无论出于何种原因,当我触发显示(Manager.trigger(“导航:show”);)时,整个页面都会刷新,并继续无限刷新 我已经盯着它看了一段时间,试图准确地追踪到底发生了什么,但我想最好还是离开一会儿。我假设某个地方发生了某种递归,但到目前为止我还没有找到它 导航应用程序js Manager.module("NavigationApp", function(NavigationApp, Manager, Backbon

我不完全确定这里发生了什么。我有一个模块,负责在页面的某个区域显示导航。无论出于何种原因,当我触发显示(
Manager.trigger(“导航:show”);
)时,整个页面都会刷新,并继续无限刷新

我已经盯着它看了一段时间,试图准确地追踪到底发生了什么,但我想最好还是离开一会儿。我假设某个地方发生了某种递归,但到目前为止我还没有找到它

导航应用程序js

Manager.module("NavigationApp", function(NavigationApp, Manager, Backbone, Marionette, $, _) {
    NavigationApp.Router = Marionette.AppRouter.extend({
        appRoutes: {
        }
    });

    var API = {
        showNavigation: function() {
            NavigationApp.Show.Controller.showNavigation();
        },
    };

    Manager.on("navigation:show", function() {
        API.showNavigation();
    });

    Manager.addInitializer(function() {
        new NavigationApp.Router({
            controller: API
        });
    });
});
Manager.module("NavigationApp.Show", function(Show, Manager, Backbone, Marionette, $, _) {
    Show.Controller = {
        showNavigation: function() {    
            console.log("showNavigation() called");
            var navigation = Manager.request("navigation:entities");

            var navigationView = new Manager.NavigationApp.Show.NavigationView({
                collection: navigation
            }); 

            Manager.navigationRegion.show(navigationView);
        }
    }
});
Manager.module("NavigationApp.Show", function(Show, Manager, Backbone, Marionette, $, _) {
    Show.NavigationItemView = Marionette.ItemView.extend({
        template: "#navigation-item-view",

        events: {
        },
    });

    Show.NavigationView = Backbone.Marionette.CompositeView.extend({
        template: "#navigation-view",
        itemView: Show.NavigationItemView,
    });
});
导航_controller.js

Manager.module("NavigationApp", function(NavigationApp, Manager, Backbone, Marionette, $, _) {
    NavigationApp.Router = Marionette.AppRouter.extend({
        appRoutes: {
        }
    });

    var API = {
        showNavigation: function() {
            NavigationApp.Show.Controller.showNavigation();
        },
    };

    Manager.on("navigation:show", function() {
        API.showNavigation();
    });

    Manager.addInitializer(function() {
        new NavigationApp.Router({
            controller: API
        });
    });
});
Manager.module("NavigationApp.Show", function(Show, Manager, Backbone, Marionette, $, _) {
    Show.Controller = {
        showNavigation: function() {    
            console.log("showNavigation() called");
            var navigation = Manager.request("navigation:entities");

            var navigationView = new Manager.NavigationApp.Show.NavigationView({
                collection: navigation
            }); 

            Manager.navigationRegion.show(navigationView);
        }
    }
});
Manager.module("NavigationApp.Show", function(Show, Manager, Backbone, Marionette, $, _) {
    Show.NavigationItemView = Marionette.ItemView.extend({
        template: "#navigation-item-view",

        events: {
        },
    });

    Show.NavigationView = Backbone.Marionette.CompositeView.extend({
        template: "#navigation-view",
        itemView: Show.NavigationItemView,
    });
});
导航_view.js

Manager.module("NavigationApp", function(NavigationApp, Manager, Backbone, Marionette, $, _) {
    NavigationApp.Router = Marionette.AppRouter.extend({
        appRoutes: {
        }
    });

    var API = {
        showNavigation: function() {
            NavigationApp.Show.Controller.showNavigation();
        },
    };

    Manager.on("navigation:show", function() {
        API.showNavigation();
    });

    Manager.addInitializer(function() {
        new NavigationApp.Router({
            controller: API
        });
    });
});
Manager.module("NavigationApp.Show", function(Show, Manager, Backbone, Marionette, $, _) {
    Show.Controller = {
        showNavigation: function() {    
            console.log("showNavigation() called");
            var navigation = Manager.request("navigation:entities");

            var navigationView = new Manager.NavigationApp.Show.NavigationView({
                collection: navigation
            }); 

            Manager.navigationRegion.show(navigationView);
        }
    }
});
Manager.module("NavigationApp.Show", function(Show, Manager, Backbone, Marionette, $, _) {
    Show.NavigationItemView = Marionette.ItemView.extend({
        template: "#navigation-item-view",

        events: {
        },
    });

    Show.NavigationView = Backbone.Marionette.CompositeView.extend({
        template: "#navigation-view",
        itemView: Show.NavigationItemView,
    });
});
Callstack(这只是重复,页面重新加载,然后再次重复)


你有发生递归的堆栈跟踪吗?我认为Chrome确实显示了这一点sometimes@TanNguyen请参阅我所做的编辑。问题是,它是一个递归,从某种意义上说,它再次加载页面,并触发上次加载页面的内容来刷新整个页面。如果我注释掉
Manager.navigationRegion.show(navigationView)它无限递归(但也不会显示)。不确定我是否错过了它或什么,但我在你的代码中没有看到任何地方可以调用
ajax
call?@TanNguyen我没有,但我认为它可能是backbone.js内部的一部分或其他东西。我对此表示怀疑。无论如何,我认为您应该检查ajax调用实际做了什么(它调用了什么)。因为您的递归发生在ajax调用的回调过程中,所以值得检查一下