在Spine.js中收听其他控制器的自定义事件

时间:2012-05-01 14:02:08

标签: spine.js

我创建了一个Spine控制器,我想从其中一个方法中触发一个自定义事件'Create'。 然后我想要另一个Spine Controller来监听那个事件。 如何使用Spine.js的自定义事件方法?

2 个答案:

答案 0 :(得分:3)

自定义事件不必是全局的。您可以按控制器实例触发/绑定事件,但不能按控制器类触发/绑定事件。例如

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”)

这样的东西

原因是模型使用@extend Event,它将方法添加到,但Controller使用@include Event,它将方法添加到实例。 Model实现了具有实例绑定的外观,因为它定义了自己的trigger,bind和unbind

的实现

答案 1 :(得分:1)

您可以像这样在Spine中触发事件

Spine.trigger "Create"

在你的其他控制器中,你可以将事件绑定到这样的方法

Spine.bind "Create", @create

您必须在此Controller中定义名为create的方法:

create: =>
  # Create action

因为自定义事件是全局的,所以建议使用控制器名称作为前缀。 您可以使用ControllerName:Create,例如:

Spine.trigger "ControllerName:Create"