浏览器返回后,Chaplin.js Mediator处理完毕

时间:2013-07-08 15:25:23

标签: backbone.js chaplinjs

我正在开发一个示例单个网络应用程序,我发现Chaplin.js。 我已经实现了一个简单的登录表单,并在intiMediator方法中的application.js中创建(如给出的例子):

Chaplin.mediator.user = new User();

并在loginController中订阅登录事件,以便在捕获事件时重定向到内部页面

Chaplin.mediator.subscribe('login', this.test);

最后当用户在loginView中提交登录表单时我写了

Chaplin.mediator.user.set({"name":this.model.get("name"),"age":this.model.get("age")}); Chaplin.mediator.publish('login',this.model);

一切顺利,直到我点击浏览器后退按钮返回登录表单。当重新提交表单时,mediator.user既没有用户obj,也没有控制器有任何订阅。 有没有人提示? TKS

1 个答案:

答案 0 :(得分:0)

如Chaplin.js文档中所述“如果您想为课程提供本地发布/订阅功能,请查看EventBroker。”

将pub / sub添加到班级:

User课程中,您可以使用下划线的_.extend来混合添加发布/订阅功能:

module.exports = class User

  _.extend @prototype, Chaplin.EventBroker

  constructor: (options) ->
    @subscribeEvent 'login', @test
    # ... 

在路线之间保留数据:

现在,在路线上保留数据是另一个故事,您可以根据需要以多种方式处理这些问题。例如,您可能知道可以使用Chaplin.Composer

保留Chaplin.View及其相关数据

此外,您还有许多有用的工具可以跟踪处理过程。例如,您在放置当前控制器之前发出beforeControllerDispose事件。

您可以订阅此事件,以便在静态类的帮助下在路由之间保留一些所需的数据。例如,将您的Controller订阅到beforeControllerDispose事件:

# in Controller..
@subscribeEvent 'beforeControllerDispose', @beforeDispose
# ...
beforeDispose: ->
  MyStaticClass.user = @user
  # ... you can do some extra cleanup here. 
  # useful for unbinding stuff that you know it will not be garbage collected/disposed

然后,使用Chaplin.Controller.beforeAction方法确保您的对象从一开始就可用。 beforeAction,正如其名称所示,在调用您的实际路线/终点的动作(indexshow ..)之前由Chaplin自动调用,因此您可以使用它来预先分配一些数据:

# in Controller..
beforeAction: ->
   @user = MyStaticClass.user
# ...
index: ->
  # @user is available here