1

我在 Chaplin.js 文档中看到了很多示例,这意味着模型/对象可以通过以下方式持久保存在中介上:

通过https://github.com/chaplinjs/facebook-example/blob/master/coffee/controllers/session_controller.coffee

createUser: (userData) -> mediator.user = new User userData

在我的应用程序中,每当我尝试将用户模型设置为调解器上的属性时,该属性不会在路由之间持续存在。例如,在@onSessionSaveSuccess 中,我将用户分配给中介,但是,在重定向到 DashboardController 并尝试访问 mediator.user 之后,我收到了undefined.

AuthController = require 'controllers/auth-controller'
SiteView = require 'views/site-view'
LoginView = require 'views/login/login-view'
Session = require 'models/session'
User = require 'models/user'
mediator = require 'mediator'

module.exports = class SessionController extends AuthController

  initialize: ->
    @subscribeEvent 'login', @triggerLogin
    @subscribeEvent 'logout', @triggerLogout

  beforeAction: ->
    super
    @reuse 'site', SiteView

  index: (params, route, options) ->
    if @authenticated()
      Chaplin.utils.redirectTo 'dashboard#index'
    else
      @view = new LoginView region: 'main'
      @view.displayErrors() if params.error

  logout: (params, route, options) ->
    @triggerLogout()

  triggerLogin: (options) ->
    if @authenticated()
      Chaplin.utils.redirectTo 'dashboard#index'
    else
      @session.save
        userId: options.username
        password: options.passphrase
      ,
        success: @onSessionSaveSuccess
        error: @onSessionSaveError

  triggerLogout: ->
    $.removeCookie 'userId'
    $.removeCookie 'accessToken'
    @session = new Session
    @session.destroy()

  onSessionSaveSuccess: (model, response, options) ->
    if /error|failure/i.test response.status
      Chaplin.utils.redirectTo 'session#index', error: true
    else if /success/i.test response.status
      $.cookie('userId', model.get('userId'), path: '/')
      $.cookie('accessToken', model.get('token'), path: '/')
      @user = new User model.attributes
      mediator.user = @user
      Chaplin.utils.redirectTo 'dashboard#index'

  onSessionSaveError: (model, response, options) ->
    Chaplin.utils.redirectTo 'session#index', error: true

请帮助我了解我是如何滥用这种模式的。谢谢你。

4

1 回答 1

0

通过@paulmillr——</p>

@theMTA调解器被密封在 Application#initMediator 方法中。我建议你像这里一样覆盖它https://t.co/3Zfgp8t86s

——保罗·米勒 (@paulmillr) 2014 年 4 月 8 日
于 2014-04-08T19:12:09.720 回答