0

我正在开发一个示例单一的网络应用程序,我发现了 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

4

1 回答 1

0

如 Chaplin.js 文档中所述,“如果您想为类提供本地 pub/sub 功能,请查看EventBroker。”

将发布/订阅添加到类:

在您的User课程中,您可以使用 Underscore 混合添加 pub/sub 功能_.extend

module.exports = class User

  _.extend @prototype, Chaplin.EventBroker

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

在路由之间持久化数据:

现在,跨路由持久化数据是另一回事,您可以根据需要以多种方式处理该问题。例如,您可能知道可以使用Chaplin.ComposerChaplin.View持久化 a及其相关数据

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

您可以订阅此事件,以借助静态类在路由之间保留一些所需的数据。例如,为您的控制器订阅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,顾名思义,在调用实际路线/端点的动作 ( index, show..) 之前由卓别林自动调用,因此您可以使用它来预先分配一些数据:

# in Controller..
beforeAction: ->
   @user = MyStaticClass.user
# ...
index: ->
  # @user is available here
于 2013-08-08T09:53:13.097 回答