2

这是我所拥有的:

ProductListView.js

define(['jquery', 'underscore', 'backbone', 'views/ProductView', 'views/PaginatorView'], function($, _, Backbone, ProductView, PaginatorView) {
    var ProductListView = Backbone.View.extend({
        className: 'productsList',
        initialize: function() {
            this.render();
        },
        render: function() {
            // some initialization
            // that's for zurb grid                
            this.$el.addClass('twelve columns');

            for(var i = startPos; i < endPos; i++) {
                this.$el.append(new ProductView({ model: products[i] }).render().el);
            }

            this.$el.append(new PaginatorView({ model: this.model, page: this.options.page }).render().el);
            // this.$el.after(new PaginatorView({ model: this.model, page: this.options.page }).render().el);
            return this;
        }
    });
    return ProductListView;
});

似乎我不能在this.$el. 线

this.$el.after(new PaginatorView({ model: this.model, page: this.options.page }).render().el);

虽然可以PaginatorView在 ( ProductListView) 视图内部附加,但似乎不可能在其外部插入一些东西。

你遇到过这样的事情吗?

4

2 回答 2

1

this.$el.after将失败,因为当render()被调用时,this.$el尚未插入 DOM(它只是一个悬空的 div)。

Backbone 鼓励您等到视图的 HTML 内容准备好后再插入。这样,浏览器只重绘一次窗口,性能要好得多。

根据经验,您应该只操作位于this.$elBackbone 视图中的内容。

于 2012-12-21T13:10:15.837 回答
0

如果视图元素尚未添加到 DOM(“断开连接”),则调用after()它不会更改元素或 DOM。但是,它确实返回了一个包含两个元素的集合,您可以将它们分配给this.$el以后附加它们。但是我很确定这不是一个好习惯,因为 aView只与一个元素纠缠在一起。

于 2012-12-21T13:17:48.950 回答