Я создал контроллер позвоночника, и я хочу вызвать пользовательское событие «Создать» из одного из его методов. Тогда я хотел бы, чтобы еще один контроллер позвоночника прослушал это событие. Как это возможно с использованием специальных методов событий 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 («речь»)
Причина заключается в том, что модель использует @extend Event
, который добавляет методы к класса, но контроллер использует @include Event
, который добавляет методы к экземпляру . Модель достигает видимости наличия привязок экземпляров, потому что она определяет свои собственные реализации триггера, связывания и unbind
Вы можете вызвать события в позвоночнике, как этот
Spine.trigger "Create"
В вас вы на другой контроллер можно привязать событие к методу как этот
Spine.bind "Create", @create
Вы должны определить метод с создайте в этом контроллере:
create: =>
# Create action
Поскольку пользовательские события являются глобальными, я бы предложил u петь имя контроллеров в качестве префикса. Вы можете использовать ControllerName: Создать, например:
Spine.trigger "ControllerName:Create"