【问题标题】:CompositeView not rendering ItemViews, doesn't even trigger appendHtmlCompositeView 不渲染 ItemViews,甚至不触发 appendHtml
【发布时间】:2012-10-16 01:05:54
【问题描述】:

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

到目前为止,我已经为 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:更新:在我的 requirejs 代码中添加以显示 ServiceItemView 在 ServiceTableView 之前加载

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 模板被渲染,但没有在下面渲染任何服务。

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

谢谢!

【问题讨论】:

  • 首先要检查:确保在 ServiceTableView 之前声明了 ServiceItemView。必须在父母之前声明孩子(这是 Backbone / JavaScript 限制,而不是 Marionette)。
  • 还有 - 你能包括你的表格和项目视图的模板吗?
  • @DerickBailey 检查并立即更新问题,谢谢。
  • 哇刚刚想通了...我将我的集合对象设置为 Backbone.Model.extend 而不是 Backbone.Collection.extend。跛脚。
  • 嗨,马特。如果你想通了,那么你最好关闭问题或回答你自己的问题。

标签: javascript backbone.js requirejs marionette


【解决方案1】:

原来我创建的Collections是这样写的:

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

如果有人想将上述代码用作他们自己项目的示例,现在已修复并可以使用。

【讨论】:

    猜你喜欢
    • 2023-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 2014-09-17
    相关资源
    最近更新 更多