骨干抓取页面加载集合(backbone fetch collection on page load)

2019-07-30 20:31发布

我知道,骨干医生说取不应该被用来填充在页面加载的集合 ,我有种找出原因:

var appCollection = Backbone.Collection.extend({
    model:appModel,
    url:'api/app',
    initialize:function(){
        this.fetch();
    },

});

var homeView = Backbone.View.extend({
    el:'#content',
    initialize:function(){
        this.collection = new appCollection(appModel)
        this.render()   

    },
    render: function () {
        var that = this;
        alert(1);
        _.each(this.collection.models, function (item) {
            that.renderApp(item);
         }, this);


    },

    renderApp: function (item) {
        var appview = new appView({
            model: item
        });

        this.$el.append(appview.render().el);
    }
})
 var home = new homeView();

该homeview.render功能真正得到前集合称为牵强,所以当我删除警报(1); 我的应用程序不会得到呈现,我也得到了一些错误说“APPNAME”(模板)是不确定的。

任何想法如何做到这一点?

抓取方法来真是得心应手,我不介意等待几秒,其实我是打算证明,表明该页面正在初始化,因为我得到了很多其他的事情,下载进度条,所以是有可能使用获取和当集合实际上是牵强然后THA代码继续运行???

Answer 1:

让我们借此从开始:

var appCollection = Backbone.Collection.extend({
    model:appModel,
    url:'api/app',
    initialize:function(){
        this.fetch();
    },

});

我会避免内部获取initialize 。 创建appCollection的实例不应必要取。 因此,使用:

var appCollection = Backbone.Collection.extend({
    model:appModel,
    url:'api/app',    
});

然后,

var homeView = Backbone.View.extend({
    el:'#content',
    initialize:function(){
        this.collection = new appCollection(appModel)
        this.render()   

    },
    render: function () {
        var that = this, p;
        console.log('fetching...');
        p = this.collection.fetch();
        p.done(function () {
            console.log('fetched!');
            _.each(that.collection.models, function (item) {
                that.renderApp(item);
            }, that);
        });
    },

    renderApp: function (item) {
        var appview = new appView({
            model: item
        });

        this.$el.append(appview.render().el);
    }
})
var home = new homeView();

这使您可以使您的homeView当集合已被取出,它会显示它的模型。 如果您有什么不明白p.done呢,看看jQuery的递延 。 在简短的Ajax请求返回的承诺。 当承诺满足(即您的收藏被取出)递延火灾和你指定的任何功能.done()将被执行。 用在这里我点console.log给予的进展反馈。



文章来源: backbone fetch collection on page load