【问题标题】:backbone.js populating a collection from nested array in model主干.js 从模型中的嵌套数组填充集合
【发布时间】:2012-05-24 18:17:43
【问题描述】:

以下是我正在尝试做的事情:我首先加载一个活跃网站用户列表,这些用户中的每一个都与一个电影列表相关联。当我点击一个用户时,我希望他的电影列表出现在下一个菜单上。但是,我没有在初始 JSON 请求中为每个用户加载完整的电影列表,而是尝试使用与骨干关系打包的 model.fetchRelated("key") 选项进行一些延迟加载。

在我看来,我有一个事件监听器:

events: {
    'click .username': 'showMovies'
},
showMovies: function(event){
    event.preventDefault();
    this.model.select();
}

在我的模型中,我有一个选择功能:

select: function(){
    this.set({selected: true});
    this.fetchRelated("movies");
    var usermovies = new UserMovieCollection(); 
    usermovies.add(this.get("movies"));     
}

问题在于 this.fetchRelated("movies") 是一个异步事件,因此当调用 'add' 时,实际上并没有加载电影。所以我想知道我的选择是什么。我的一个想法是以某种方式将其包装到 jQuery 的延迟对象中......基本上,使用回调。不过,我不完全确定如何做到这一点,而且我不确定使用回调形式是否真的是很好的 Backbone 设计。

有谁知道我如何使用回调或某些(首选)系统来实现这一点?谢谢!

编辑:

我已经设法使用 deferred 来获得它,但我仍然想知道是否有没有 deferred 的更好的主干解决方案。

select: function(){
        var model = this; 
        var usermovies = new UserMovieCollection();
        $.when(this.fetchRelated("movies")).then(function(){
            console.log(model.get("movies"));
        });
    }

【问题讨论】:

    标签: jquery backbone.js callback backbone-relational


    【解决方案1】:

    稍微浏览一下文档,似乎有一个可以绑定到的事件?

    var user = new User({ name: 'User 1' } );
    user.bind( 'add:movies', function( model, coll ) {
        // Maybe this will work?
    });
    

    我对 Backbone.Relational 不太熟悉,所以这可能有效,也可能无效...

    祝你好运!

    【讨论】:

    • 感谢您的回复。我认为这样的事情可能会奏效,但不幸的是它似乎并没有真正完成这项工作。现在我一直在使用来自 jquery 的 $.when 和 .then,然后拉出一个 collection.each(function(model){});渲染它们。老实说,这似乎是一个糟糕的解决方案。
    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多