我正在开发一个示例单个网络应用程序,我发现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
答案 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
,正如其名称所示,在调用您的实际路线/终点的动作(index
,show
..)之前由Chaplin自动调用,因此您可以使用它来预先分配一些数据:
# in Controller..
beforeAction: ->
@user = MyStaticClass.user
# ...
index: ->
# @user is available here