我在Backbone中有一个Clock
模型:
var Clock = Backbone.Model.extend({});
我正在尝试获取具有/clocks/123
最新信息的实例。我试过的一些事情:
Clock.fetch(123)
// TypeError: Object function (){ ... } has no method 'fetch'
fetch
:c = new Clock({id: 123})
c.fetch()
// Error: A 'url' property or function must be specified
我尝试创建一个AllClocks
集合资源(即使我在页面上没有用过这样的东西):
var AllClocks = Backbone.Collection.extend({
model: Clock,
url: '/clocks/'
});
var allClocks = new AllClocks();
allClocks.fetch(123);
// returns everything from /clocks/
如何获得一个 API支持的时钟?
答案 0 :(得分:137)
尝试在模型中指定urlRoot:
来自文档:
var Book = Backbone.Model.extend({urlRoot : '/books'});
var solaris = new Book({id: "1083-lem-solaris"});
solaris.fetch();
答案 1 :(得分:26)
你的第二种方法是我用过的方法。尝试将以下内容添加到您的时钟模型中:
url : function() {
var base = 'clocks';
if (this.isNew()) return base;
return base + (base.charAt(base.length - 1) == '/' ? '' : '/') + this.id;
},
这种方法假设您已经在URL中实现了带有hashbang的控制器,如http://www.mydomain.com/#clocks/123,但即使您尚未使用它也应该有效。
答案 2 :(得分:26)
我个人建议,按照Model#url method documentation
model = new Model(id: 1)
view = new View(model: model)
collection = new Collection([model])
model.fetch()
在你的收藏中记得添加收集网址:
url: "/models"
并在View的初始化函数中执行:
this.model.bind("change", this.render)
这样,骨干网将使用此url执行ajax请求:
"/models/1"
您的模型将被更新并呈现视图,而无需修改Collection#url或Model#urlRoot
请注意: 抱歉这个例子出现在咖啡脚本中,但您可以轻松地将其转换为js添加var语句
答案 3 :(得分:12)
var Person = Backbone.Model.extend({urlRoot : '/person/details'});
var myName = new Person({id: "12345"});
myName.fetch();
因此,您在
上发出Ajax请求URL http://[domainName]/person/details/id
然后你回复了JSON。
Enjoiiii !!!
答案 4 :(得分:0)
...如果您不想在模型urlRoot上使用尾部斜杠,请执行此操作:
url : function() {
return this.urlRoot + this.id;
},
答案 5 :(得分:0)
您可能应该通过集合访问该对象并始终将其保留在集合中。这是怎么做的:
var AllClocks = Backbone.Collection.extend({
model: Clock,
url: '/clocks/'
});
var allClocks = new AllClocks();
my_clock = allClocks.add({id: 123});
my_clock.fetch()
答案 6 :(得分:0)
我想使用RESTful网址,但我无法理解为什么'postId'无法添加到基本网址。
var PostModel = Backbone.Model.extend({
urlRoot: 'getBlogPost',
defaults: {
postTitle: "defaultTitle",
postTime: "1970-01-01",
postContent: "defaultContent",
postAuthor: "anonymous"
}
});
var post = new PostModel({
postId: 1
});
alert(post.url());
然后我知道只有在我将'idAttribute'设置为Model中的'postId'之后我才能获得正确的URL。 像这样:
var PostModel = Backbone.Model.extend({
idAttribute: 'postId',
urlRoot: 'getBlogPost',
defaults: {
postTitle: "defaultTitle",
postTime: "1970-01-01",
postContent: "defaultContent",
postAuthor: "anonymous"
}
});