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调用的回调过程中,所以值得检查一下