1

我正在使用带有 Backbone 的标准 Rails 堆栈。按照这里的教程:http ://www.jamesyu.org/2011/01/27/cloudedit-a-backbone-js-tutorial-by-example/我得到以下代码:

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;

我在代码中唯一改变的是基本变量。

这似乎是非常错误的。有没有办法更好地做到这一点?我不应该像这样修改 Backbone 的 url 以使其与 Rails 一起工作吗?有没有更好的方法,这样我就不必一遍又一遍地复制和粘贴同一行代码?

4

1 回答 1

2

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

你什么意思?如果您要实例化相同的模型,为什么需要这样做?但是,不清楚您的意思是否是创建新的(单独的)模型。如果你这样做,你可以把这段代码放在模型基类中,可以这么说:

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

  else
   //... do something else
 }

然后您可以直接从 MyModel 继承其他模型:

var AnotherModel = MyModel.extend({...});

如果我正确理解你的问题,这样的事情应该可以解决你的问题。只需检查 base 是否存在,这样当 Backbone 查询url()没有参数时,它仍然可以返回有效值。base您可以通过将这些 es 作为选项传递给模型的方法来初始化这些es initialize

如果不是继承,则只需创建类似于url上述方法的方法,然后传入parameterfor each 模型。

我不太确定混淆是什么,但恕我直言,这两个都应该起作用:)

于 2012-09-18T04:31:45.837 回答