3

Backbone Marionette で大きな問題が発生しており、それがまったく理解できないようです。たぶん、私の男であるデリック・ベイリーが私を助けてくれるでしょう。私がやっていることは単純です、少なくとも1人はそう思うでしょう。レイアウトがあります (今のところ、不適切なコーヒーのインデントは無視してください)。

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

奇妙なことに、 my@view.render().elは実際に定義されており、うまく機能しています! に追加して$('body')も問題ありません。

4

1 に答える 1