Вы вызываете fetch
внутри вашего initialize
метода, поэтому ничто не сможет связать эту коллекцию до того, как будут инициированы события.Метод initialize
вызывается во время создания экземпляра вашей коллекции, и это означает, что вы вызываете fetch
до того, как конструктор вернется, но вам нужен экземпляр коллекции, прежде чем вы сможете связываться с его событиями.
Рассмотрим что-то, похожее на это:
class Posts extends Backbone.Collection
do_things: ->
@fetch
beforeSend: () =>
console.log "about to fetch..."
@trigger "postsLoading"
success: (collection, response) =>
debug "successfully loaded ajax"
@trigger "postsLoaded"
error: (collection, response) => @trigger "postsLoadingError"
Тогда, если вы сделаете это:
p = new Posts
p.on('postsLoading', -> console.log('loading'))
p.do_things()
, вы увидите, что ваше событие postsLoading
действительно инициировано.
Демонстрация: http://jsfiddle.net/ambiguous/PDeFg/
Мораль этой истории проста:
Не вызывайте fetch
внутри вашего конструктора, если вам небезразличны слушатели событий.