按自定义属性加载 Backbone 个模型
Loading Backbone model by custom attribute
比方说,我有以下 Backbone 模型:
var Meal = Backbone.Model.extend({
defaults: {
"appetizer": "caesar salad",
"entree": "ravioli",
"dessert": "cheesecake"
},
urlRoot : api/meals,
idAttribute : id,
// some other stuff
});
假设我有一个后端 Spring MVC conroller 拦截 GET 请求,所以当我获取我的模型时,使用
myMeal.fetch();
我的模型从服务器加载。
现在一切都清楚了,我的问题是,如果我在后端有另一个方法将字符串作为参数并将 return 作为 responsebody,正确的 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 调用。
您可以覆盖默认提取,拦截调用,进行一些验证,然后传递到原始提取:
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 也没有主菜的新餐点的情况。
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
});
比方说,我有以下 Backbone 模型:
var Meal = Backbone.Model.extend({
defaults: {
"appetizer": "caesar salad",
"entree": "ravioli",
"dessert": "cheesecake"
},
urlRoot : api/meals,
idAttribute : id,
// some other stuff
});
假设我有一个后端 Spring MVC conroller 拦截 GET 请求,所以当我获取我的模型时,使用
myMeal.fetch();
我的模型从服务器加载。 现在一切都清楚了,我的问题是,如果我在后端有另一个方法将字符串作为参数并将 return 作为 responsebody,正确的 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 调用。
您可以覆盖默认提取,拦截调用,进行一些验证,然后传递到原始提取:
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 也没有主菜的新餐点的情况。
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
});