2013-06-26 1 views
1

У меня возникла проблема, что событие «form: selectedForm» вызывает метод «showForm», но при отправке его в мое представление возникает следующая ошибка: TypeError: e [t] is не является функцией.Контроллер listenTo ломается, когда в методе обратного вызова

Это указано в строке 128 в сценарии backbone.js, но я не знаю, что он там делает. Похоже, он ищет событие «to» или «on» в коллекции.

Что я здесь делаю неправильно?

MyController = Backbone.Marionette.Controller.extend({ 

initialize: function(options) { 
    this.options = options; 
    this.urls = options.urls; 
    this.mainRegion = options.mainRegion; 

    this.view = new MyLayout(); 
    this.mainRegion.show(this.view); 
    this.view.render(); 

    this.showSelectorView(this.view.formHeader); 
}, 

showSelectorView : function(view) { 
    var forms = new MyForms(); 
    forms = this.urls.loadForms; 

    var selectorView = new FormSelectorView({ 
     collection: forms 
    }); 
    forms.fetch(); 
    this.listenTo(selectorView, "form:selectedForm", this.showForm); 

    view.show(selectorView); 
}, 

showForm : function(models) { 
    console.log("showForm"); 
    var form = new FormContentView({ 
     collection: models 
    }); 
     this.view.form.show(form); 
    } 
}); 

MyLayout = Backbone.Marionette.Layout.extend({ 

    template: Backbone.Marionette.TemplateCache.get('#content'), 

    regions: { 
     formHeader:   "#selector", 
     form:   "#formContent", 
     formContent:  "#content", 
     formFooter:   "#save", 
     formTemplates:  "#templates" 
    } 

}); 

FormSelectorView = Backbone.Marionette.ItemView.extend({ 

    template: Backbone.Marionette.TemplateCache.get('form-selector-template'), 

    events : { 
     "click option" : "selectForm" 
    }, 

    initialize : function() { 
     this.listenTo(this.collection, "sync", this.render, this); 
    }, 

    selectForm : function(e) { 
     e.preventDefault(); 
     var id = $(e.currentTarget).attr("name"); 
     var item = this.collection.get(id); 

     this.trigger("form:selectedForm", item.attributes.fields); 
    } 
}); 

ответ

1

Я думаю, что ошибка в функции просмотра showSelector, вы перезапись коллекции форм во второй строке,

я думаю, что ваши намерения в этой линии были Ассинг URL-адреса коллекции форм, так я думаю, что это исправит это:

showSelectorView : function(view) { 
var forms = new MyForms(); 
forms.url = this.urls.loadForms; /// Im assuming you were trying to pass the url here 

var selectorView = new FormSelectorView({ 
    collection: forms 
}); 
forms.fetch(); 
this.listenTo(selectorView, "form:selectedForm", this.showForm); 

view.show(selectorView); 
},