1

アイテム/複合ビューでのモデル属性アクセスに少し問題があります。<%=username%>ItemViewには、すべてのモデル属性データがありますが、たとえばhtml/templateに何も出力したくない場合。

なぜこれが機能しないのかわかりません。通常、コードは私のものと同じくらい単純です。

要旨:https ://gist.github.com/e6e68b525468606bd039以下:

index.html:

<section>
  <%= test %>
  <ul class="thumbnails" id='userslist'></ul>
</section>

<script type="text/template" id="usertemplate">
  Username: <%= username %>
</script>

test.coffee:

define [ 'jquery', 'underscore', 'backbone', 'marionette', 'text!templates/us/index.html' ], ( $, _, Backbone, Marionette, TPL) ->

    class UserView extends Backbone.Marionette.ItemView
        template  : '#usertemplate'
        tagName   : 'li'
        className : 'span2'

        initialize: ->
            console.log 'm:', @model.attributes

    class UsPageView extends Backbone.Marionette.CompositeView
        template : _.template TPL
        itemView : UserView

        itemViewContainer: "#userslist"

        initialize: (options) ->
            @collection = options.collection
            @collection.fetch()

        appendHtml: (cView, iView, idx) ->
            cView.$(@itemViewContainer).append iView.el

        serializeData: ->
            test: 'ok'

    UsPageView

console.logの印刷:Object { username: "Foo" }

4

1 に答える 1

0

一時的な解決策を見つけました: - テンプレート コードを使用して新しいファイルを作成します:

  // --- members.html
  Username: <%= username %>

そして、 ItemView クラスを次のように変更しました。

define [ 'jquery', 'underscore', 'backbone', 'marionette', 'text!templates/us/index.html', 'text!templates/us/members.html' ], ( $, _, Backbone, Marionette, TPL, M) ->

    class UserView extends Backbone.Marionette.ItemView
        tagName   : 'li'
        className : 'span2'

        template: (serializedModel) =>
            _.template M, @model.toJSON()

    class UsPageView extends Backbone.Marionette.CompositeView
        template          : _.template TPL
        itemView          : UserView    
        itemViewContainer : "#userslist"

        initialize: (options) ->
            @collection = options.collection
            @collection.fetch()

        appendHtml: (cView, iView, idx) ->
            cView.$(@itemViewContainer).append iView.el

    UsPageView

このソリューションは私にとってはうまくいきます。私の最初の問題は、テンプレートの生テキストを再作成したいときのようです。通常、 $('#usertemplate').text() はすべて '<%= ... %>' を含むテンプレート データを返しますが、テンプレート データは返しません。どうしてか分かりません。

誰かが解決策を見つけたら、私はまだ興味があります:)

于 2013-01-28T21:57:45.527 に答える