我在我的应用中使用backbone.js。我的名为MyModel的模型是
Backbone.Model.extend({
urlRoot: 'home'
});
需要使用网址获取模型" home / abc / xyz"在哪里" abc"和" xyz"在我看来是动态的。我做了以下
var model = new MyModel({id:'abc/xyz'});
model.fetch();
但它不起作用。 它转到url" home / abc?xyz"。
我该如何解决这个问题?
答案 0 :(得分:1)
这是Backbone.Model的url
函数,它负责Backbone中的这种行为:
url: function() {
var base =
_.result(this, 'urlRoot') ||
_.result(this.collection, 'url') ||
urlError();
if (this.isNew()) return base;
return base.replace(/([^\/])$/, '$1/') + encodeURIComponent(this.id);
}
正如您所看到的,encodeURIComponent(this.id)
将对您的ID进行编码,因此您无法通过和'/' - > '%2F'。
你总是可以重写这个功能,但我想这不是最好的主意,因为它可以打破另一个东西。
我可以建议你另一种方法:
只需将模型的urlRoot
定义为功能,然后完成工作:
var yourModel = Backbone.Model.extend({
defaultUrl: 'home',
urlRoot: function () {
return defaultUrl + this.get('yourUrlAttribute');
}
});
在创建时,只需将yourUrlAttribute
作为模型属性传递并获取模型。
考虑到这种方法,Backbone.Model将附加编码的“id”作为URL的最后一部分(当你获取模型时),你可以得到你想要的。