Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/55.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/6/google-chrome/4.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默认为.json,并将模型包含ID_Javascript_Ruby On Rails_Backbone.js - Fatal编程技术网

Javascript 将所有主干模型的新url默认为.json,并将模型包含ID

Javascript 将所有主干模型的新url默认为.json,并将模型包含ID,javascript,ruby-on-rails,backbone.js,Javascript,Ruby On Rails,Backbone.js,我使用的是带主干的标准Rails堆栈。按照此处的教程:我得到了以下代码: Models.Users = Backbone.Model.extend({ url: function() { var base = '/users' if (this.isNew()) return base + '.json'; else return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;

我使用的是带主干的标准Rails堆栈。按照此处的教程:我得到了以下代码:

Models.Users = Backbone.Model.extend({
  url: function() {
    var base = '/users'
    if (this.isNew()) return base + '.json';
    else return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
  }
});
这段代码非常有效

但是,无论何时创建新模型,我都会复制和粘贴完全相同的两行代码:

    if (this.isNew()) return base + '.json';
    else return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
我在代码中唯一更改的是基变量

这似乎大错特错。有没有办法做得更好?难道我不应该像这样修改主干的url以使其与Rails一起工作吗?有没有更好的方法使我不必一遍又一遍地复制和粘贴同一行代码

但是,每当我创建一个新模型时,我都会复制和粘贴完全相同的两行代码

你什么意思?如果要实例化同一个模型,为什么需要这样做?但是,不清楚您是否要创建新的(单独的)模型。如果要这样做,可以将此代码扔到模型基类中,也就是说:

var MyModel = Backbone.Model.extend({
 url: function(base){
  if(base)
   //... do something

  else
   //... do something else
 }
然后,您可以直接从MyModel继承其他模型:

var AnotherModel = MyModel.extend({...});
如果我正确理解了你的问题,像这样的事情应该能解决你的问题。只需检查base是否存在,这样当主干网在没有参数的情况下查询
url()
时,它仍然可以返回有效值。您可以通过将其作为模型的
initialize
方法的选项传递来初始化这些
base
es

如果不是继承,那么只需创建类似于上面的
url
的方法,并为每个模型传入
参数


我真的不确定混淆的是什么,但我知道这两种方法应该如何运作:)

是的,通过创建新模型,我的意思是创建新的独立模型。基类解决方案工作得非常好。