Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有自定义获取URL的Backbone.js_Javascript_Backbone.js - Fatal编程技术网

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()。如果查看源代码,您将看到采用了正确的属性: