2013-08-24 2 views
3

У меня серьезная проблема с Магионтой Магистра, которую я просто не могу понять. Может быть, мой человек Дерик Бейли может помочь мне. То, что я делаю, просто, по крайней мере, подумать. У меня есть макет (пожалуйста, игнорируйте неправильный отбор кофе сейчас).Регион Неопределенный в макете макета

class SearchLayout extends Backbone.Marionette.Layout 

# template: _.template SearchResultsTemplate 
template: Handlebars.compile SearchResultsTemplate 
tagName: "section" 
className: "search-layout" 

ui: 
    "searchInput": ".search-input" 
    "saveTopic": ".save-this-topic" 

regions: 
    resourcesRegion: ".resources-content" 

А потом я связываю с моделью, которая привязана к этой схеме, в @searchResults модели.

initialize: -> 
    @model.on "change:query", @setClasses, @ 
    @model.on "change:query", @setResource, @ 

onRender: -> 
    # app.vent.trigger "view:rendered" 
    setTimeout => 
    @setClasses() 
    @globalBindings() 
    @handlebarsHelpers() 
    @bindUIElements() 
    , 50 

handlebarsHelpers: -> 
    # helpers specific to this view. 

globalBindings: -> 
    # @model.on "change:query", @setResource, @ 

setResource: -> 

    @resources = new ResourcesCollection() 
    @resources.fetch 
    async: false 
    success: => 
     @view = new ResourcesViews.collectionView 
     collection: @resources 
     @resourcesRegion.show @view 

Я пытался сначала привязать к моим ресурсам с .on, но это не работает хорошо, так что я решил пойти с успехом на выборку, как показано здесь.

Странная вещь, я имел это работает прекрасно, и даже делает (иногда) в первый раз, но после того, как я делать какие-либо изменения в моей модели поиска, я получаю эту ошибку:

Uncaught TypeError: Cannot call method 'show' of undefined 

Вот мои взгляды:

define [ 
    "backbone.marionette" 
    "jquery" 
    "underscore" 
    "backbone" 
    "text!templates/resources/resource.html" 
], (Marionette, $, _, Backbone, ResourceViewTemplate) -> 
    class ResourceView extends Marionette.ItemView 

    className: "js-resource js-resource-view col-md-6" 
    tagName: "div" 
    template: Handlebars.compile ResourceViewTemplate 

    initialize: -> 

    onBeforeRender: -> 

    onRender: -> 

    class ResourcesEmptyView extends Marionette.ItemView 

    className: "js-resource-not-found not-found js-resource-view col-md-12" 
    tagName: "section" 
    template: "<h3>Sorry, nothing found for that search. Try another.</h3>" 

    initialize: -> 

    onBeforeRender: -> 

    onRender: -> 

    class ResourcesCollectionView extends Marionette.CollectionView 

    className: "js-resources js-resources-view list-unstyled" 
    tagName: "ul" 
    emptyView: ResourcesEmptyView 
    itemView: ResourceView 

    initialize: -> 

    onBeforeRender: -> 

    onRender: -> 

    exports = 
    collectionView: ResourcesCollectionView 
    individualView: ResourceView 

странная вещь, мой @view.render().el фактически определены и работают здорово! Он даже добавит к $('body') без проблем.

ответ

1

Я понял это!

Оказывается, мне нужно было повторно отобразить регион, а затем позвонить @setResources по моему методу onRender. Я не совсем уверен, почему это стало неопределенным, но вот что закончилось:

initialize: -> 
    @model.on "change:query", @setClasses, @ 
    @model.on "change:query", @render, @ 

onRender: -> 
    console.log 'render' 
    # app.vent.trigger "view:rendered" 
    setTimeout => 
    @setClasses() 
    @globalBindings() 
    @handlebarsHelpers() 
    @bindUIElements() 
    @setResource() 
    , 50 

handlebarsHelpers: -> 
    # helpers specific to this view. 

globalBindings: -> 
    # @model.on "change:query", @setResource, @ 

setResource: -> 
    console.log 'setting resource' 

    @resources = new ResourcesCollection 
    searchQuery: @model.get("query") 
    @resources.fetch 
    async: false 
    success: => 
     @view = new ResourcesViews.collectionView 
     collection: @resources 
     console.log @resourcesRegion 
     @resourcesRegion.show @view 
Смежные вопросы