在Marionette中,如何从视图功能向路由器发送消息?

时间:2014-09-20 14:25:40

标签: backbone.js marionette

我正在使用Browserify(有点像AMD)

在视图事件处理程序中,验证密码后,我想发送一条消息' login_success'路由器改变路线。

在路线' login_success'处理程序,我想调用route.navigate(' / newRoute'),这是从Backbone扩展的功能。

但我还没弄清楚如何从视图向路由器发送消息。任何人都可以共享示例代码或链接吗?

在Backbone中有改变路线的最佳做法吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

就个人而言,我喜欢触发路由器正在侦听的事件,然后采取行动。

所以在你看来你可以说

onPasswordVerified: function() {
  this.trigger "password:verified"
}

然后在控制器中你可以听到那个事件(请注意,有时这是以childview为前缀,具体取决于你是否正在收听集合/复合视图,但我怀疑你是否有登录页面):

this.listenTo(loginView, "password:verified", function(args) {
  App.vent.trigger "password:verified"
});

最后在你的路由器中你会听到那个事件(我通常会在我的App对象中构建一个navigate函数,它在后台执行Backbone.history.navigate

App.vent.on "password:verified", function() {
    App.navigate("/users");
    API.userProfile();
}

关于这一点的好处是,如果您的应用程序的其他部分应该听取此事件,那么他们可以相应地采取行动。此外,通过这种方式路由,您可以更新到网页的网址/路由,就像您在没有关联的“刷新页面”服务器调用的情况下完成Backbone.history.navigate({trigger: true})一样。

答案 1 :(得分:0)

最直接的方法就是使用Backbone.history.navigate()

如果你想拥有一些地方导航权限,你可以做一些事情

App.execute("navigate:to", "/url")

并按您认为合适的方式实施:

App.commands.setHandler("navigate:to", function(url){
    ...
    Backbone.history.navigate(url)
})