【问题标题】:Listen to custom events from other Controllers in Spine.js在 Spine.js 中监听来自其他控制器的自定义事件
【发布时间】:2012-06-03 10:52:46
【问题描述】:

我创建了一个 Spine 控制器,我想从它的一个方法中触发一个自定义事件“创建”。 然后我想要另一个 Spine Controller 来监听那个事件。 这怎么可能使用 Spine.js 的自定义事件方法?

【问题讨论】:

    标签: spine.js


    【解决方案1】:

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

    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 实现

    【讨论】:

      【解决方案2】:

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

      Spine.trigger "Create"
      

      在你是另一个控制器时,你可以将事件绑定到这样的方法

      Spine.bind "Create", @create
      

      你必须在这个控制器中定义一个名为 create 的方法:

      create: =>
        # Create action
      

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

      Spine.trigger "ControllerName:Create"
      

      【讨论】:

        猜你喜欢
        • 2017-02-18
        • 1970-01-01
        • 2017-03-20
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        相关资源
        最近更新 更多