如何在 emberjs 中访问其他控制器方法
How to access other controllers methods in emberjs
有没有办法从控制器访问其他控制器的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/
相关文章:
- 重定向到“提交”按钮上的其他控制器
- AngularJS:如何与其他控制器共享作用域函数和变量
- 如何从其他控制器更改角度模型值
- 在使用 IIFE 函数的角度 js 中无法访问其他控制器中的常量值
- 如何在 emberjs 中访问其他控制器方法
- 如何使用 AngularJS 处理文档单击并通知其他控制器
- 如何从其他控制器关闭角度 UI 模式
- 使用干净的url将模型传递给chaplinjs中的其他控制器
- 如何从其他控制器调用$http.post
- 如何在其他控制器中验证会话后访问会话用户名
- 与其他控制器共享选定的选择
- 如何从$dialog控制器向任何其他控制器获取信息
- 如何将数据从一个控制器传递到服务,并在同一事件上访问其他控制器上的数据
- $watch不能在其他控制器的变量上工作
- AngularJS -如何从其他控制器中运行控制器
- AngularJS从其他控制器更新$scope
- ng -单击“更新服务出厂值以反映在其他控制器上”
- Angular.js -使函数在其他控制器中可用
- Angularjs会注意其他控制器对作用域变量的改变
- 当页面发生变化时,Angular控制器将数据传递给其他控制器