Javascript 带有自定义获取URL的Backbone.js
我正在尝试在我的主干模型上设置一个变量获取方法,该方法将获取给定用户的当前模型。这可从Javascript 带有自定义获取URL的Backbone.js,javascript,backbone.js,Javascript,Backbone.js,我正在尝试在我的主干模型上设置一个变量获取方法,该方法将获取给定用户的当前模型。这可从/API/mealplan/owner/{username}/current上的API获得 我已经编写了以下模型。我注释掉了URL根,因为原型fetch调用只是使用urlRoot,我想看看这是否覆盖了我以某种方式传递的URL参数 var mealPlan = Backbone.Model.extend({ name: 'Meal Plan', //urlRoot: '/api/mealplans',
/API/mealplan/owner/{username}/current
上的API获得
我已经编写了以下模型。我注释掉了URL根,因为原型fetch调用只是使用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;
}
});
我在其他地方的一些变体中看到过这种情况,比如at,在这种情况下,代码略有不同(我从这一点开始,并将其分解以便于阅读)
当我将options对象传递给fetch时,它的url参数很好,但是它似乎忽略了它 我假设获取的参数与保存的参数相同-事实并非如此 fetch的方法签名只接受“选项”而不接受“属性”,因此找不到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;
}
});
我认为最好重写url()方法,如下所示:
var mealPlan = Ministry.Model.extend({
name: 'Meal Plan',
urlRoot: '/api/mealplans',
//--> this gets called each time fetch() builds its url
url: function () {
//call the parent url()
var url=Backbone.Model.prototype.url.call(this);
//here you can transform the url the way you need
url += "?code=xxxx";
return url;
}
...
此外,在你上面的例子中,我认为有一个错误,你应该用fetch替换fetchCurrent。我搜索了100个主题、问题和帖子来寻找这个答案!非常感谢你!不用担心-我总是尝试回答我张贴的问题,如果我发现自己只是以防万一。我有时会疯狂地翻阅未回复的在线帖子。是否应该在覆盖中提及urlRoot?不清楚根如何在“?code=xxxx”字符串前加前缀。可能
var url=Backbone.Model.prototype.urlRoot.call(this)代码>否,它是来自模型的方法。正确的方法是url.call()。如果查看源代码,您将看到采用了正确的属性: