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()
应该可以工作。