Backbone.js 获取模型后将其添加到集合

Backbone.js 获取模型后将其添加到集合,backbone.js,Backbone.js,我很难弄清楚如何从服务器填充模型的属性,然后将填充的模型添加到集合中,并由视图呈现该集合。以下是我的代码: var movieDetails = new cinephile.Models.MovieDetailsModel({ id: movie.get('id') }); this.collection.add(movieDetails); 电影细节模型的内部: cinephile.Models.MovieDetailsModel = Backbone.Model.extend({

我很难弄清楚如何从服务器填充模型的属性,然后将填充的模型添加到集合中,并由视图呈现该集合。以下是我的代码:

var movieDetails = new cinephile.Models.MovieDetailsModel({ id: movie.get('id') });
this.collection.add(movieDetails);
电影细节模型的内部:

cinephile.Models.MovieDetailsModel = Backbone.Model.extend({

    url: function()
    {
        return '/cinephile/api/index.php?action=getMovieDetails&movieId=' + this.id;
    },

    initialize: function()
    {
        this.fetch();
    }
});
this.collection
只是一个集合,模型设置为
cinephile.Models.MovieDetailsModel

我正在侦听要添加到集合中的项,当它们被添加到集合中时,将执行以下操作:

displayMovie: function(movie)
{
    var view = new cinephile.Views.MovieView({
        model: movie,
        className: 'movie clearfix',
        template: JST['app/scripts/templates/MovieView.ejs'],
    });

    this.$("#my-movies").append(view.el);
},
MovieView看起来像这样:

cinephile.Views.MovieView = Backbone.View.extend({

    initialize: function(options)
    {
        this.template = options.template;
        this.render();
    },

    render : function()
    {
        this.$el.html(this.template(this.model.attributes));
        return this;    
    },
});
我遇到的问题是,我使用的模板试图访问未定义的模型属性。我很确定它是未定义的,因为MoveDetailsModel在将模型添加到集合并随后渲染到视图之前尚未完成获取

我如何解决这个问题?我希望能够创建一个接受id的MovieDetailsModel,使用该id从服务器获取电影详细信息,然后将填充的模型添加到集合中,然后将该集合呈现到屏幕上

感谢您的帮助。

返回一个对象,这是一个延迟对象承诺。 调用fetch时,尚未填充属性。承诺对象有don ejqXHR函数,其中可以传递回调以在请求完成后执行

我建议将fetch移到另一个方法而不是构造函数中,因为在那里可以返回jqXHR对象并访问其done函数。 以下是一个例子:

var movieDetails = new cinephile.Models.MovieDetailsModel({ id: movie.get('id') });
var promise = movieDetails.fetch();
promise.done(function() {
    var view = new cinephile.Views.MovieView({model: movieDetails});
    view.render();
});

你为什么不回你的电话呢?