gpt4 book ai didi

backbone.js - 如何使用 Backbone.Model.save() promise 进行验证

转载 作者:行者123 更新时间:2023-12-04 18:09:19 26 4
gpt4 key购买 nike

我正在尝试使用从 Backbone.model.save() 返回的 promise .实际上,根据规范,如果有效则返回一个 promise,否则返回 false。我想在 future 使用返回值,无论类型如何deferred.done()deferred.fail()调用。像这样:

var promise = model.save();

$.when(promise).done(function() {
console.log('success!');
});

$.when(promise).fail(function() {
console.log('dang');
});

但是, $.when()当通过非 promise 火灾时, done() ,所以,在上面,如果模型无效, $.when(false).done()火灾,你会得到“成功!”。

我知道我可以使用 successerror save() 中的属性,但对于我的代码,有多个 done() 是有利的稍后应用的功能。毕竟这就是 promise 的力量。

所以,我只剩下:
var promise = model.save();

if (promise) {
$.when(promise).done(function() {
console.log('success!');
});

$.when(promise).fail(function() {
console.log('dang');
});
} else {
console.log('dang');
}

我讨厌不干燥。
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();
}

变得很乱。你得到了图片。我希望我只是在这里遗漏了一些东西。

最佳答案

您可以覆盖 Backbone.save 方法以获得所需的行为。如果原始保存函数的返回值是一个 bool 值(这意味着验证失败),只需返回一个自定义 promise 并拒绝其相关的延迟。

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");
});

试试这个 fiddle

http://jsfiddle.net/WNHXz/1/

关于backbone.js - 如何使用 Backbone.Model.save() promise 进行验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18907247/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com