如何在 emberjs 中访问其他控制器方法

How to access other controllers methods in emberjs

本文关键字:其他 控制器 方法 访问 emberjs      更新时间:2023-09-26

有没有办法从控制器访问其他控制器的action方法?

我已经尝试了如下所示@get('controllers.user').stopEditing()但似乎不起作用:

user_edit_controller.js.咖啡

App.UserEditController = Ember.ObjectController.extend
  needs: ['user']
  title_options: ["Mr", "Mrs", "Dr", "Miss", "Ms"]
  startEditing: ->
    user = @get 'model'
    transaction = user.get('store').transaction()
    transaction.add user
    @transaction = transaction
  stopEditing: ->
    transaction = @transaction
    if(@transaction)
      @transaction.rollback()
      @transaction = undefined
  actions:
    save: ->
      @transaction.commit()
      @transaction = undefined
      @get('controllers.user').stopEditing()
    cancel: ->
      @get('controllers.user').stopEditing()

user_controller.js.咖啡

App.UserController = Ember.ObjectController.extend
  isEditing: false
  needs: ['userEdit']
  actions:
    startEditing: ->
      userEditController = @get 'controllers.userEdit'
      userEditController.set 'model', @get 'model'
      userEditController.startEditing()
      @set 'isEditing', true
    stopEditing: ->
      userEditController = @get 'controllers.userEdit'
      userEditController.stopEditing()
      @set 'isEditing', false
    destroyRecord: ->
      if window.confirm "Are you sure you want to delete this contact?"
        @get('model').deleteRecord()
        @get('store').commit()
        # return to the main contacts listing page
        @get('target.router').transitionTo 'users.index'

要以编程方式触发操作,您需要使用 send(actionName, args ...) .

在您的情况下,只需更新到以下内容:

@get('controllers.user').send('stopEditing')

你得到了错误的控制器(除非你在用户控制器上使用相同的方法)。

@get('controllers.userEdit').stopEditing()

但是您在控制器的范围内,因此您应该能够执行

@stopEditing()

如果你真的希望它们成为操作,它们需要存在于操作哈希中,如果是这种情况并且操作存在于此控制器上,或者它是关联的路由,或者父级的路由,您可以使用

@send('stopEditing')

要查看操作的去向,请向下滚动此页面,它有一个很好的图表:http://emberjs.com/guides/templates/actions/