Backbone得到的模型不是ID

时间:2014-10-20 12:00:22

标签: backbone.js coffeescript thorax.js

我有一个患者的骨干模型,我可以用来从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似乎很糟糕。还有另一种方法吗?

1 个答案:

答案 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。但我不认为这是好方法。 快乐的编码。