我有一个患者的骨干模型,我可以用来从Mongo数据库中提取患者。但除了通过ID轮询它们之外,我希望能够通过名字来提取它们。我能想到这样做的唯一方法就是做一些事情:
class Thorax.Models.Patient extends Thorax.Model
urlRoot: '/api/patients'
idAttribute: '_id'
fetch: (options = {}) ->
if @get 'first' # has first name, lookup by that instead of id
@urlRoot = '/api/patients/by_name/' + (@get 'first') + '/' + (@get 'last')
@set '_id', ''
super options
但是覆盖urlRoot似乎很糟糕。还有另一种方法吗?
答案 0 :(得分:0)
您可以使用Backbone.Model#url作为方法并在那里应用所有逻辑。 因此,如果它是模型中的名字,请使用一个url,否则使用default url root。
以下是此jsbin代码(只需转换为CoffeeScript
)
您可以打开网络选项卡,查看我创建的2个模型的2个XHR请求,它们是不同的。
var Model = Backbone.Model.extend({
urlRoot: 'your/url/root',
url: function() {
// If model has first name override url to lookup by first and last
if (this.get("first")) {
return '/api/patients/by_name/' + encodeURIComponent(this.get('first')) + '/' + encodeURIComponent(this.get('last'));
}
// Return default url root in other cases
return Backbone.Model.prototype.url.apply(this, arguments);
}
});
(new Model({ id: 1, first: 'Eugene', last: 'Glova'})).fetch();
(new Model({ id: "patient-id"})).fetch();
您也可以将此逻辑应用于url
选项中的fetch
。但我不认为这是好方法。
快乐的编码。