0

我似乎无法解决这个简单的问题。

我有一个 Backbone/Marionnette 应用程序,我将路由器定义为:

app.utils.AppRouter = Backbone.Marionette.AppRouter.extend({

initialize: function(){

    this.route("", "home", function(){
        console.log("In home!");
        app.layout.content.show(new app.views.BrowseRestaurantsLayout());
    });

    this.route("account", "account", function(){
        console.log("In account!");
        app.layout.content.show(new app.views.AccountView());
    });
}
});

在我的代码的其他地方,我需要导航到#account页面,所以我调用:

 app.router.navigate('account', {trigger:true});

我可以看到 URL 更改为#account,我的AccountView页面确实出现了一会儿,然后消失,被主页替换。

当我触发更改时,控制台显示:

In account! 
In home! 

我错过了什么?

4

3 回答 3

1

你检查过你的模板吗?我有一个类似的问题,发现问题是我链接中的href。

  <a href=#"></a>

在临时将 URL 切换到我真正想要的 URL 后,它导致路由器将我送回 root。

于 2013-03-15T04:27:06.163 回答
1

您的主路由可能是在您的帐户路由之后调用的包罗万象。

当你改变路线时会发生什么?

this.route("/", "home", function(){
    console.log("In home!");
    app.layout.content.show(new app.views.BrowseRestaurantsLayout());
});

或者可能是路线的顺序。最后尝试添加家庭路由器。

于 2012-08-09T20:05:21.693 回答
0

我不确定这是否能解决任何问题,但是您配置路由器的方式很奇怪。我认为不需要 Marionette 的 appRouter,因为您没有使用它的功能,而且我不会在初始化方法中配置路由。以这种方式配置路由器会更“类似于骨干网”:


app.utils.AppRouter = Backbone.Router.extend({

  routes: {
    "": "home",
    "account": "account"
  },

  home: function(){
    console.log("In home!");
    app.layout.content.show(new app.views.BrowseRestaurantsLayout());
  },

  account: function(){
    console.log("In account!");
    app.layout.content.show(new app.views.AccountView());
  }
});

您定义路线的方式可能与此有关。

于 2012-08-09T21:10:42.357 回答