我想听一些应用程序路由/控制器广播的事件。我用Evented mixin 扩展了它们。
当触发事件时,我想更改视图的状态(简单的闪存消息),但我无法访问路由/控制器。我尝试了 withcontext
和controller
属性,但部分:
this.get('controller').on('someEvent', handler)
// or
this.get('context').on('someEvent', handler)
说“对象没有方法”
如何更改视图的控制器以及格式(字符串、对象)是什么?
回应评论
我想将逻辑与视图分离。让我描述一下。单击按钮时,与其关联的操作会冒泡到 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 的事件还是计算属性 - 我希望您能详细说明一下。