我正在尝试在我的骨干模型上设置一个变量获取方法,该方法将获取给定用户的当前模型。这可以从/api/mealplans/owner/{username}/current
上的API获得。
我写了以下模型。我注释掉了URL Root,因为原型提取调用只是使用了urlRoot
而且我想看看是否覆盖了我以某种方式传递的url参数。
var mealPlan = Backbone.Model.extend({
name: 'Meal Plan',
//urlRoot: '/api/mealplans',
defaults: {},
fetchCurrent: function (username, attributes, options) {
attributes = attributes || {};
options = options || {};
if (options.url === undefined) {
options.url = "/api/mealplans/owner/" + username + "/current";
}
return Backbone.Model.prototype.fetch.call(this, attributes, options);
},
validate: function (attributes) {
// To be done
return null;
}
});
我已经看到这样做,在其他地方的某些变体中,例如在backbone.js use different urls for model save and fetch - 在这种情况下代码略有不同(我从那开始并将其分解以使我更容易读出。)
当我把它传递给fetch时,options对象的url参数很好,但是它似乎忽略了它!
答案 0 :(得分:15)
我假设提取相同的参数来保存 - 事实并非如此。
获取的方法签名仅采用“选项”而非“属性”,因此找不到url参数。
模型代码应该看起来更像这样..
var mealPlan = Ministry.Model.extend({
name: 'Meal Plan',
urlRoot: '/api/mealplans',
defaults: {
},
fetchCurrent: function (username, options) {
options = options || {};
if (options.url === undefined) {
options.url = this.urlRoot + "/owner/" + username + "/current";
}
return Backbone.Model.prototype.fetch.call(this, options);
},
validate: function (attributes) {
// To be done
return null;
}
});
答案 1 :(得分:1)
我认为最好覆盖url()方法,如下所示:
{{1}}
此外,在上面的示例中,我认为存在错误,您应该通过获取
替换 fetchCurrent