让我们说,我有以下Backbone模型:
var Meal = Backbone.Model.extend({
defaults: {
"appetizer": "caesar salad",
"entree": "ravioli",
"dessert": "cheesecake"
},
urlRoot : api/meals,
idAttribute : id,
// some other stuff
});
假设我有一个后端Spring MVC控制器拦截GET请求,所以当我获取我的模型时,使用
myMeal.fetch();
我的模型从服务器加载。 现在一切都很清楚,我的问题是,如果我在后端有另一个方法,它接受一个字符串作为参数并返回作为响应体,右边的json元素。 我如何从我的模型中拨打电话? 我正在寻找这样的东西:
var meal = new Meal({'entree': 'value'});
meal.fetch({
// if there is no id, and 'entree' is given, I want to call /
// api/findByEntree passing this.entree as parameter.
});
我想通过在Backbone模型中指定url来从对象本身到后端进行Ajax调用。
答案 0 :(得分:1)
您可以覆盖默认提取,拦截通话,执行一些验证,然后转到原始提取:
var Meal = Backbone.Model.extend({
fetch: function(options) {
if(this.has('id')) {
Backbone.Model.prototype.fetch.call(this, options);
} else {
this.findByEntree(options);
}
},
fetchByEntree: function(options) {
...
}
});
但是,请记住,您需要一些额外的逻辑来处理尝试获取新膳食的情况,该膳食既没有ID也没有主菜。
答案 1 :(得分:1)
urlRoot可以是一个函数,因此无需覆盖fetch。我相信你可以做这样的事情:
var Meal = Backbone.Model.extend({
defaults: {
"appetizer": "caesar salad",
"entree": "ravioli",
"dessert": "cheesecake"
},
urlRoot : function() {
return 'api/' + this.get('id') ? 'meals' : 'findByEntree';
},
idAttribute : id,
// some other stuff
});