0

このビューをレンダリングすると

var MyView = Backbone.View.extend({
/* el : '.myview', used when rendered on router request */
    render : function () {
        var data = new Data(); /* a collection from ajax request */
        var that = this;

        data.fetch({
            success : function (bla, data) {
                var template = _.template( $('#temp').html(), {data: data.players} );
                that.$el.html(template);
            }
        });
    }
});

ルーターの要求に応じて、次のように機能します。

var Router = Backbone.Router.extend({
    routes : {
        'bla' : 'bla'
    }
});

var myView = new MyView();

var router = new Router();
router.on('route:bla', function () {
    myView.render();
});

しかし、単にページと一緒にロードしたい場合は、次のようにはなりません。

var myView = new MyView({ el: $(".myview") });
4

1 に答える 1

0

投稿した最後の行で、render 関数の呼び出しが欠落しているためです。

var myView = new MyView({ el: $(".myview") });
myView.render();

それに加えて、初期化のワークフローが少し複雑です。.render()つまり、ビューの単一の責任に違反する関数内のデータを要求します。アプリケーションで行う何か。

var Router = Backbone.Router.extend({
    routes : {
        'bla' : 'bla'
    },

    bla: function () {
        app.BlaApp();
    }
});

app.BlaApp = function () {
    var collection = new Collection();
    collection.fetch({
        success: function (collection) {
            var view = new app.BlaView({model: collection});
            view.render();
        }
    })
}

app.BlaView = Backbone.View.extend({
    render: function () {
        var template = // render template based on this.model;
        this.$el.html(template);

        return this;
    }
});
于 2013-03-16T16:47:32.457 に答える