在backbone.js中查看和追加表行

w41d8nur  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(143)

我正在尝试使用 Backbone.js 创建一个代码。用户将文本输入到两个字段Item和price中。然后将这些信息附加到一个表中,并为输入的每个输入对创建一个新行。
我已经为表格创建了一个模板。在创建视图时我的问题是,由于item和price的文本字段中的数据需要排序到相应的单元格中,我如何正确地追加新行。我可以只为行创建一个视图吗?还是需要为每个单元格都创建一个视图?

<div id="container">
    <script id="grocery-list-template" type="text/template">
        <table>
        <thead>
            <tr>
            <th>Item</th>
            <th>Price</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><%=something to get item%></td>
                <td><%=something to get the price%></td>
                <td></td>
                <td><button class="complete"></button><button class="remove"></td>
            </tr>
            </tbody>
        </table>
    </script>
</div>

这基本上就是我要做的,但是我不知道如何指定行和单元格?我必须使用标记名为每个单元格创建一个视图吗:td还是只保留标记名:tr并将数据路由到适当的单元格中?我发现了一个使用li元素附加列表的示例,所以我尝试将其中的一些元素修改为适合我的代码

var TableView = Backbone.View.extend({
            tagname: "tr",
            classname: "itemAndprice",
            template:_.template($("grocery-list-template").html()),
            render: function() {
                this.$el.html(this.template(this.model.toJSON()));
                this.$el.attr("id", this.model.id);
                if (this.model.get('done')) this.$el.addClass('done');
                $("#GroceryList").append(this.$el);
                return this;
            },
mum43rcc

mum43rcc1#

您可以为整行创建一个视图。对于每一行,您都需要一个带有itemprice属性的行模型,您可以将这些属性传递到行视图的构造函数中。这看起来很像您代码中的TableView(除了我希望将其命名为RowView之外,TableView是一个不同的“父”视图)
假设您的模型包含itemprice属性,那么row-view-template应该包含

....
<td><%=item%></td>
<td><%=price%></td>
....

然后,this.model.toJSON()将为您提供一个包含itemprice属性的哈希值,该哈希值将被传递到this.template,并使用相关值填充<%=item%><%=price%>
您还可以查看下划线的模板函数以获得更多信息。
但是请注意行视图和表视图应该是两个不同的视图。从代码中可以看出,您有一个适合表视图的模板(其中还包含一个不应该存在的行)和一个适合行视图的视图。
有了两个视图,您可以在table-view中传递一个行模型集合,table-view将遍历该集合,并为每个模型添加一行(-view)。当用户创建新项时,您可以将一个模型添加到集合中,并重新呈现表。
希望这对你有帮助。

相关问题