Mat*_*att 5 backbone.js jquery-deferred
我正在尝试使用从中返回的承诺Backbone.model.save().实际上,根据规范,如果有效则返回一个promise,否则返回false.我想在将来deferred.done()和deferred.fail()电话中使用返回值,无论类型如何.像这样:
var promise = model.save();
$.when(promise).done(function() {
console.log('success!');
});
$.when(promise).fail(function() {
console.log('dang');
});
Run Code Online (Sandbox Code Playgroud)
但是,$.when()当通过非承诺火灾时,done()如上所述,如果模型无效,则会$.when(false).done()触发,并且您获得"成功!".
我知道我可以使用success和error属性save(),但是使用我的代码,done()以后应用多个函数是有利的.这就是承诺的力量.
所以,我留下:
var promise = model.save();
if (promise) {
$.when(promise).done(function() {
console.log('success!');
});
$.when(promise).fail(function() {
console.log('dang');
});
} else {
console.log('dang');
}
Run Code Online (Sandbox Code Playgroud)
我讨厌不干.
var promise = model.save();
var fail = function() {
console.log('dang');
};
if (promise) {
$.when(promise).done(function() {
console.log('success!');
});
$.when(promise).fail(function() {
fail();
});
} else {
fail();
}
Run Code Online (Sandbox Code Playgroud)
弄得很乱.你得到了照片.我希望我在这里遗漏一些东西.
小智 6
您可以覆盖Backbone.save方法以获得所需的行为.如果原始保存函数的返回值是布尔值(这意味着验证失败),则只返回自定义承诺并拒绝其相关的延迟.
var oldSaveFunction = Backbone.Model.prototype.save;
Backbone.Model.prototype.save = function(){
var returnedValue = oldSaveFunction.apply(this, arguments),
deferred = new $.Deferred();
if(_.isBoolean(returnedValue)){
deferred.reject();
return deferred.promise();
}
return returnedValue;
}
var Person = Backbone.Model.extend({
url : 'http://www.google.com',
validate : function(attributes){
if(!("name" in attributes))
return "invalid";
}
});
var person = new Person();
$.when(person.save()).fail(function(){
console.log("failed");
});
Run Code Online (Sandbox Code Playgroud)
试试这个小提琴
| 归档时间: |
|
| 查看次数: |
5241 次 |
| 最近记录: |