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.afterrender()が呼び出されたとき、this.$elまだDOMに挿入されていないため失敗します(これは単なるぶら下がっているdivです)。

バックボーンを使用すると、ビューのHTMLコンテンツの準備ができるまで待ってから挿入することをお勧めします。このように、ブラウザはウィンドウを1回だけ再描画し、パフォーマンスが大幅に向上します。

経験則としてthis.$el、バックボーンビューの内部にあるコンテンツのみを操作する必要があります。

于 2012-12-21T13:10:15.837 に答える
0

ビュー要素がまだDOMに追加されていない場合(「切断」)、ビュー要素を呼び出しafter()ても要素もDOMも変更されません。ただし、2つの要素を含むコレクションが返され、this.$el後でそれらを追加するために割り当てることができます。Viewそれでも、aは1つの要素にのみ絡み合っているため、これは適切な方法ではないと確信しています。

于 2012-12-21T13:17:48.950 に答える