2012-05-01 1 views
2

Я создал контроллер позвоночника, и я хочу вызвать пользовательское событие «Создать» из одного из его методов. Тогда я хотел бы, чтобы еще один контроллер позвоночника прослушал это событие. Как это возможно с использованием специальных методов событий Spine.js?Слушайте пользовательские события от других контроллеров в Spine.js

ответ

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 («речь»)

Причина заключается в том, что модель использует @extend Event, который добавляет методы к класса, но контроллер использует @include Event , который добавляет методы к экземпляру . Модель достигает видимости наличия привязок экземпляров, потому что она определяет свои собственные реализации триггера, связывания и unbind

1

Вы можете вызвать события в позвоночнике, как этот

Spine.trigger "Create" 

В вас вы на другой контроллер можно привязать событие к методу как этот

Spine.bind "Create", @create 

Вы должны определить метод с создайте в этом контроллере:

create: => 
    # Create action 

Поскольку пользовательские события являются глобальными, я бы предложил u петь имя контроллеров в качестве префикса. Вы можете использовать ControllerName: Создать, например:

Spine.trigger "ControllerName:Create"