【发布时间】:2013-05-16 20:50:17
【问题描述】:
我想听一些应用程序路由/控制器广播的事件。我用 Evented mixin 扩展了它们。
当触发事件时,我想更改视图的状态(简单的闪存消息),但我无法访问路由/控制器。我尝试了 context 和 controller 属性,但是
部分:
this.get('controller').on('someEvent', handler)
// or
this.get('context').on('someEvent', handler)
说“对象没有方法”
如何更改视图的控制器以及格式是什么(字符串、对象)?
回应cmets
我想将逻辑与视图分离。让我描述一下。单击按钮时,与其关联的操作会冒泡到 ApplicationRoute,因为它非常通用:
App.ApplicationRoute = Em.Route.extend Ember.Evented,
events:
someAction: ->
@trigger 'someEvent', 'success'
我还有一个视图 - 我想在事件触发时更改其状态的 flash 消息:
App.FlashView = Em.View.extend
elementId: 'flash'
classNames: 'alert'
didInsertElement: ->
$this = this.$ this
@get('controller').on('someEvent', (status) ->
if status is 'success'
message = "Wow! Success!!"
else
message = "Oops! An error has occured!"
$this
.removeClass('alert-error alert-success')
.addClass("alert-#{status}")
.empty()
.append(message)
.show()
.fadeIn()
.delay(2000)
.fadeOut()
)
实际上,我不介意使用其他技术,因为我愿意接受新的可能更好的解决方案。无论是通过 Evented mixin 的事件还是计算属性 - 我希望您能详细说明一下。
【问题讨论】:
-
您能再展示一些代码吗,尤其是您尝试访问控制器的部分?
-
FWIW,大约 80% 的时间我都想使用事件来影响我的观点,我发现我最好有一个属性。
-
我已经更新了问题
-
我也不确定是否可以像我一样订阅路由触发的事件。
标签: ember.js