CompositeView无法渲染ItemViews,甚至不会触发appendHtml

时间:2012-10-16 01:05:55

标签: javascript backbone.js requirejs marionette

我的视图渲染有点迷失 - 第一次尝试这样做。我的模板设置与此应用程序类似。

到目前为止,我让它为CompositeView渲染模板,但它不渲染任何ItemViews。它甚至没有触发渲染方法来尝试调试,所以我不知道我可以在哪里记录碎片以查看它卡在哪里...这是代码:

这是我的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:更新:在我的requirejs代码中添加,以显示在ServiceTableView之前加载了ServiceItemView

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);

更新:以下是两个模板:

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模板,但不会在下面呈现任何服务。

感谢任何帮助。甚至还有关于在哪里粘贴日志语句以获取更多信息的指针。

谢谢!

1 个答案:

答案 0 :(得分:0)

原来我写的Collections写了:

Backbone.Model.extend代替Backbone.Collection.extend。我必须在创建集合时从模型中复制代码以加快编写它。

现在修复并且如果有人想将上述代码用于他们自己项目的示例,则可以正常工作。