javascript - 从 Backbone 模型返回 promise

标签 javascript backbone.js promise backbone-views backbone-model

我有一个模型,它是从服务器获取的。我想在创建时返回一个 promise ,以便使用此模型的 View 知道何时渲染。 我可以将 promise 绑定(bind)到窗口(或应用程序),但更简洁的方法是在模型初始化时返回它(var promise = new app.User())。 有没有办法做到这一点。还有:这是处理异步数据的好方法吗?

app.User = Backbone.Model.extend({
    urlRoot: baseUrl+"/user",

    initialize: function(){
        this.promise = this.fetch();
        return this.promise; // Doesn't work ofc
    }

});

最佳答案

https://github.com/kmalakoff/backbone-modelref .

但似乎最好将异步和同步操作分开(即获取数据和实例化对象)。在应用程序/ Controller /路由器中获取您的模型,然后创建适当的 View 并将它们传递给。

var model = new AppModel({ id: 123 });  
// state of model is semi-defined
model.fetch().then(function () {
  // state of model is completely defined
  var view = new AppModelView({ model: model });
  $('.placeholder').html(view.render().$el);
}).fail(function(reason) {
  var view = new AppErrorAlertView({ model: model, error: reason });
  ..
})

我想,一般来说,制作对模型自身状态异步操作的方法并不是什么好主意,因为在这种情况下,模型的状态,就其他方法而言,变得不确定。在上面的示例中,我首先创建了一个具有半确定状态的对象。或者,您可以使用工厂模式来隐藏不确定性 从客户端代码。例如使用集合:

 var collection = new AppModelCollection();
 collection.fetch().then(function(){
     var model = collection.get(123); // state of model is completely defined.
 });

关于javascript - 从 Backbone 模型返回 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22452055/

相关文章:

javascript - three.js/webGL/GLSL - 利用随机数学

javascript - SoundManager2 WaveFormData 和 PeakData 返回 0

javascript - 使用子集合将 JSON 数据转换为主干模型

node.js - Bluebird promise, promise.each 只执行一次

javascript - 为什么我的代码返回一个 promise ?

angularjs - 在加载资源之前等待 promise 解决

javascript - 使用 Object.keys() 获取 searchParams

javascript - 使用 Facebook Graph API 获取用户好友列表

javascript - 通过从构造函数返回现有实例来实现 javascript 实例存储

backbone.js - Busterjs+requirejs+backbone 怎么写测试?