【发布时间】:2012-06-03 10:52:46
【问题描述】:
我创建了一个 Spine 控制器,我想从它的一个方法中触发一个自定义事件“创建”。 然后我想要另一个 Spine Controller 来监听那个事件。 这怎么可能使用 Spine.js 的自定义事件方法?
【问题讨论】:
标签: spine.js
我创建了一个 Spine 控制器,我想从它的一个方法中触发一个自定义事件“创建”。 然后我想要另一个 Spine Controller 来监听那个事件。 这怎么可能使用 Spine.js 的自定义事件方法?
【问题讨论】:
标签: spine.js
自定义事件不必是全局的。您可以按控制器实例触发/绑定事件,但不能按控制器类触发/绑定事件。比如
class PresenterController extends Spine.Controller
giveSpeech: (message) ->
@trigger("speech",message)
class App extends Spine.Controller
addKeynote: ->
@speaker = new PresenterController
@speaker.bind("speech",@listen)
listen: (message) =>
alert("I heard " + message)
但是你不能得到像 PresenterController.bind("speech") 之类的东西
原因是Model使用@extend Event,为class添加方法,而Controller使用@include Event,为instance添加方法。 Model 实现了具有实例绑定的外观,因为它定义了自己的 trigger、bind 和 unbind 实现
【讨论】:
你可以像这样在 Spine 中触发事件
Spine.trigger "Create"
在你是另一个控制器时,你可以将事件绑定到这样的方法
Spine.bind "Create", @create
你必须在这个控制器中定义一个名为 create 的方法:
create: =>
# Create action
因为自定义事件是全局的,我建议使用控制器名称作为前缀。 您可以使用 ControllerName:Create 例如:
Spine.trigger "ControllerName:Create"
【讨论】: