Backbone.js带有自定义提取URL

时间:2013-08-22 14:24:17

标签: javascript backbone.js

我正在尝试在我的骨干模型上设置一个变量获取方法,该方法将获取给定用户的当前模型。这可以从/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参数很好,但是它似乎忽略了它!

2 个答案:

答案 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