Javascript 将所有主干模型的新url默认为.json,并将模型包含ID
我使用的是带主干的标准Rails堆栈。按照此处的教程:我得到了以下代码: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;
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
的方法,并为每个模型传入参数
我真的不确定混淆的是什么,但我知道这两种方法应该如何运作:)是的,通过创建新模型,我的意思是创建新的独立模型。基类解决方案工作得非常好。