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

Javascript 如何访问emberjs中的其他控制器方法,javascript,ember.js,Javascript,Ember.js,是否有方法从控制器访问其他控制器的操作方法 我尝试了一些类似下面的@get('controllers.user')。stopEditing(),但似乎不起作用: user\u edit\u controller.js.coffee App.UserEditController = Ember.ObjectController.extend needs: ['user'] title_options: ["Mr", "Mrs", "Dr", "Miss", "Ms"] startEd

是否有方法从控制器访问其他控制器的
操作
方法

我尝试了一些类似下面的
@get('controllers.user')。stopEditing()
,但似乎不起作用:

user\u edit\u controller.js.coffee

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()
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'
user\u controller.js.coffee

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()
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'

要以编程方式触发操作,您需要使用
发送(actionName,args…

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

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

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

但您在控制器的范围内,所以您应该能够

@stopEditing()
如果你真的想让它们成为动作,它们就需要存在于动作散列中,如果是这样,并且动作存在于这个控制器上,或者它的关联路由,或者父级路由,你可以直接使用

@send('stopEditing')

要查看操作的方向,请向下滚动此页面,它有一个很好的图表:

什么不起作用?我怀疑
@get('controllers.user.actions').stopEditing()
应该可以工作。