2

ビューのレンダリングに少し迷いました。初めてこれを実行しようとしました。このアプリケーションのようにテンプレートを設定しています。

これまでのところ、CompositeViewのテンプレートをレンダリングしていますが、ItemViewはレンダリングされていません。レンダリングメソッドをトリガーしてデバッグを試みることすらできないので、どこでピースをログに記録して、どこでスタックしているかを確認できます...コードは次のとおりです。

これは私のItemViewです:

define([
    'jquery', 
    'underscore', 
    'backbone',  
    'text!templates/service/item.ejs'
], function($, _, Backbone, template) {
        ServiceItemView = Backbone.Marionette.ItemView.extend({
            tagName: 'tr',
            template: '#service-item-template'
        });
    }
);

これは私のCompositeViewです:更新: ServiceItemViewがServiceTableViewの前にロードされることを示すためにrequirejsコードに追加されました

define([
    'jquery', 
    'underscore', 
    'backbone', 
    'views/service/item', 
    'text!templates/service/table.ejs'
], function($, _, Backbone, ServiceItemView, template) {
    var ServiceTableView;
        ServiceTableView = Backbone.Marionette.CompositeView.extend({
            tagName: 'table',
            id: 'service-table', 
            itemView: ServiceItemView, 
            itemViewContainer: 'tbody', 
            template: '#service-table-template', 

            appendHtml: function(collectionView, itemView){
                console.log("here");
                //collectionView.$("tbody").append(itemView.el);
            }
        });
    }
);

これが私がそれをレンダリングしようとするところです:

    service_collection = new ServiceCollection([
        new Service({ 
            name: "Men's Cut", 
            length: 108000, 
            price: 2500
        }), 
        new Service({
            name: "Women's Cut", 
            length: 324000, 
            price: 5000
        })
    ]);

    service_table = new ServiceTableView({
        collection: service_collection
    });

    App.main_region.show(service_table);

更新: 2つのテンプレートは次のとおりです。

ServiceItemViewテンプレート:

<script type="text/html" id="service-item-template">
    <td><%= name %></td>
    <td><%= length %></td>
    <td><%= price %></td>
    <td class="actions">
        <input type="button" class="icon" value="Delete" />
    </td>
</script>

ServiceTableViewテンプレート:

<script type="text/html" id="service-table-template">
    <thead>
        <tr>
            <th>Name</td>
            <th>Time allotment</th>
            <th>Pricing</th>
            <th class="actions">Actions</th>
        </tr>
    </thead>
    <tbody>
    </tbody>
</script>

ここでも、ServiceTableViewテンプレートがレンダリングされますが、その下にサービスはレンダリングされません。

どんな助けでも大歓迎です。より多くの情報を得るためにログステートメントを貼り付ける場所へのポインタさえ。

ありがとう!

4

1 に答える 1

0

Collections私が作成したものは次のように書かれていることがわかりました:

Backbone.Model.extendの代わりにBackbone.Collection.extend。コレクションの作成を高速化するために、コレクションを作成するときにモデルからコードをコピーしたに違いありません。

現在修正されており、上記のコードを自分のプロジェクトの例として使用したい場合に機能します。

于 2012-10-19T16:32:38.910 に答える