Backbone.js 向主干模型调用服务器添加自定义方法,返回简单的数据类型
寻找一些关于使用主干在模型(“foo”)上正确实现自定义逻辑的指导 我们有一个一般要求,即避免直接调用.ajax调用(见下文),并尝试通过Backbone.js MV*框架始终如一地执行所有操作 我已经在视图上实现了一个方法(因为没有更好的放置位置),但是我觉得这个实用方法更适合作为模型上的方法。 我读过一些文章,建议在模型上实现over-riding the-backbone.sync方法来添加自定义方法,但问题是,我不确定这样做是否“正确”,当模型需要一个对象时,我实际调用的REST服务方法返回一个简单的布尔值(真/假) 以下是我实现的代码:Backbone.js 向主干模型调用服务器添加自定义方法,返回简单的数据类型,backbone.js,Backbone.js,寻找一些关于使用主干在模型(“foo”)上正确实现自定义逻辑的指导 我们有一个一般要求,即避免直接调用.ajax调用(见下文),并尝试通过Backbone.js MV*框架始终如一地执行所有操作 我已经在视图上实现了一个方法(因为没有更好的放置位置),但是我觉得这个实用方法更适合作为模型上的方法。 我读过一些文章,建议在模型上实现over-riding the-backbone.sync方法来添加自定义方法,但问题是,我不确定这样做是否“正确”,当模型需要一个对象时,我实际调用的REST服务方法
var myView = Backbone.View.extend({
initialize: function (options) {
...
},
canDelete: function (parmOne, parmTWo){
var okToDelete;
var url = '/url/to/check/if/delete/is/ok/parmOne/ParmTwo';
$.ajax({
async: false,
type: "GET",
url: url,
success: function (valBool, response, jqXHR) {
okToDelete = valBool;
},
error: function (data, textStatus, jqXHR) {
notifyError(data.responseText)
}
});
return okToDelete;
}
});
寻找实施建议,使其更清洁
谢谢您没有覆盖
主干.sync
是对的。根据:
默认情况下,它使用jQuery.ajax发出RESTful JSON请求并返回jqXHR。您可以覆盖它以使用不同的持久性策略,例如WebSocket、XML传输或本地存储
如果您想定义不同的peristence策略,您需要覆盖sync
特定于车型的
实用功能属于该车型
对于像您这样的实用功能,实现它的正确位置应该是型号
var myModel = Backbone.Model.extend({
canDelete: function (parmOne, parmTWo){
var url = '/url/to/check/if/delete/is/ok/parmOne/ParmTwo';
return $.ajax({
async: false,
type: "GET",
url: url
});
}
});
在您看来,您可能甚至绑定到了delete函数,例如,deleteModel
。由于我们连接了model.canDelete
方法以返回$。ajax
承诺我们可以在视图中执行错误检查,如下所示:
var myView = = Backbone.View.extend({
initialize: function (options) {
...
},
deleteModel: function(event) {
var that = this;
this.model.canDelete()
.done(function (data) {
// Do some stuff if ok to delete like:
that.model.destroy();
})
.fail(function (data) {
// Do some stuff if not ok to delete like:
that.model.notifyError(data.responseText)
});
}
});
当然,如果模型仅以非常有限的方式使用,您可以像以前一样保留成功/失败回调。感谢您的详细回复。我最终返回了$.ajax承诺,删除了async=false,它允许我处理视图中的“完成”和“失败”条件。我很高兴。很高兴我的回答帮助了你:)