繁体   English   中英

Backbone-Relational查找还是加载?

[英]Backbone-Relational find or load?

Backbone-Relational中的模型缓存非常好,但要安全地加载一个简单的模型需要相当多的代码。 例如

// Try and find a model in the Cache
this.model = MyModel.find({id:id});

if(this.model){
    // Model loaded from cache, do something.
    this.doSomething();
}else{
    // Load model then do something on success.

    var self =  this;

    this.model = new MyModel({id:id});
    this.model.fetch({
        success: function(){
            self.doSomething();
        }
    });
}

我想你可以编写一个实用程序函数,但是有一个更好的方法可以做到这一点吗? 看起来太过分了。

这看起来像是典型的mysql / db工作。

您可能希望以不同的方式构建它:

this.model = MyModel.find({id:id});

try {
    this.doSomething();
} catch (e) {
    if (e instanceof SomeSpecificException) {
        var fetchPromise = this.model.fetch();
        fetchPromise.done(
            this.doSomething.bind(this)
        );
    }
}

这里发生了什么事?

Try / Catch是一种很好的方法,可以注意到找不到或不存在的东西。 如果你发现错误,那么你可以获取。 Fetch应该返回future / promise(如果它没有编写修复其原型的垫片)。 当promise解决(返回完成)时,它将调用doSomething,其范围将绑定到此。 那就是你要删掉自己。

如何垫片?

它是这样的:

var Deferred = require('simply-deferred');

Backbone.Model.prototype.fetch = function(options) {
   var dfd = Deferred();

   Backbone.Model.prototype.fetch.call(
       this, 
       _.extend({ success: dfd.resolve.bind(this) }, options)
   );

   return dfd.promise;
}

我不确定的唯一部分是使用哪个函数:Backbone.Model.prototype.fetch可能指向原始的Backbone fetch。 您基本上希望在选项和范围中调用Backbone-Relational fetch方法。 然后有成功选项来解决你的承诺。

为什么不内置这个? 那么节点土地上的某个人决定承诺不是默认的方式,因此让你回到地狱。

怎么样,副作用是找到的对象将更新到服务器上的对象,无论如何都会执行服务器请求。 它有点挫败了缓存的目的。

this.model = MyModel.findOrCreate({id:id}).fetch({
    success: function(){
        self.doSomething();
    }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM