在服务器返回错误的情况下,我在骨干ajax成功方法中有自己的自定义错误代码。问题是这个代码在我的应用程序中重复,我想在一个地方编辑成功函数,所以我不必在每个ajax成功中不断重复这个错误处理程序。我想编辑成功函数以包含此错误检查包装器。你知道怎么做吗?
以下是我的一个观点中的成功方法示例:
"success" : function success(model, data)
{
if(data['error'] !== undefined && data['error'].length === 0)
{
message('error', 'Whoops! System Error. Please refresh your page.');
}
else if(data['error'] !== undefined)
{
message('error', data['error']);
}
else
{
//add templates and do stuff here
}
},
理想情况下,我想在某个配置中设置它,然后我就可以使用:
"success" : function success(model, data)
{
// add templates and do stuff here
}
这可能吗?我尝试使用ajaxSetup,但这对我来说似乎不起作用。
更新后的代码仍未运作:
这确实让我更进一步,但错误处理程序不能作为包装器运行。数据没有传递到我的ajax调用中。事实上,我在ajax调用上的成功方法已经不再运行了。我在我的ajax调用中尝试了console.log(“some text”),但没有输出任何内容。你知道这有什么问题吗?
// Save the original Sync method
defaultSync = Backbone.sync;
//Over ride Backbone async
Backbone.sync = function(method,
model,
options)
{
success = options.success
options.success = function(data)
{
if(data['error'] !== undefined && data['error'].length === 0)
{
message('error', 'Whoops! System Error. Please refresh your page.');
}
else if(data['error'] !== undefined)
{
message('error', data['error']);
}
else
{
success(model,
data);
}
}
return defaultSync(method,
model,
options)
}
答案 0 :(得分:0)
有两种方法可以解决这个问题:
您可以创建自己的自定义模型,该模型继承自Backbone Model。在其中,您可以覆盖save方法。 Read Backbone docs on how to extend their model
在你的自定义保存方法中,你将调用super的save方法,检查responseText,如果它成功,那么你将调用成功回调。 (请阅读关于如何在Javascript中调用父模型的方法的骨干文档)
Backbone有一个Sync模块,它基本上默认生成所有ajax请求,解析响应,然后调用在模型上调用save时指定的成功/错误回调。这很简单。 Take a look at this doc。您可以再次覆盖它,完全按照Backbone默认执行的操作,但只根据您收到的responseText调用成功/错误回调。
更新:示例代码(未测试警告代码)
//Over ride Backbone async
defaultSync = Backbone.Sync // Save the original Sync method. We'll be needing that.
Backbone.Sync = function(method, model, options) {
success = options.success
error = options.error
options.success = function(model, data, options) {
if (/% all your custom checks are true */) {
success (model, data, options);
}
else {
error(model,data,options);
}
}
return defaultSync(method, model, options);
}
请确保使用此策略,将覆盖所有Backbone同步的Sync方法。如果你不想那样,那就使用Model#save override。
看看this code我在哪里覆盖Backbone.Sync以使其与Parse.com API一起使用。