我对backbone.js很新,为了试一试,我做了一个函数来使用我的数组追加一个元素。但我不知道如何从服务器或本地路径获取相同内容。
我尝试了一些教程,但仍然无法获得任何好结果。任何人都可以更正我的功能来从本地文件夹或服务器获取数据吗?
代码:
这是我的本地路径:'..data/data.json'
(function($){
var student = [
{name:'student1'},
{name:'student2'},
{name:'student3'}
]
var model = Backbone.Model.extend({
defaults:{
name:'default name'
}
});
var collection = Backbone.Collection.extend({
model:model
});
var itemViews = Backbone.View.extend({
tagname:'li',
render:function(){
this.$el.html(this.model.get('name'));
return this;
}
})
var view = Backbone.View.extend({
el: $("#contacts"),
initialize:function(){
this.collection = new collection(student);
this.render();
},
render:function(){
var that = this;
_.each(this.collection.models, function(item){
that.renderName(item);
})
},
renderName:function(item){
var itemView = new itemViews({model:item});
this.$el.append(itemView.render().el);
}
});
答案 0 :(得分:8)
集合具有url
属性,该属性链接到可以获取模型的URL(当然是以正确的JSON格式)。
如果您有RESTful API,则可以将它们直接绑定到后端的集合中。
在您的情况下,您可以按如下方式修改集合定义
var collection = Backbone.Collection.extend({
model:model,
url: '..data/data.json' //OR WHATEVER THE URL IS
});
然后在实例化你的集合时,你必须调用fetch()方法来填充集合。
myCollection = new collection();
myCollection.fetch();
有关详细信息,请参阅this post
答案 1 :(得分:4)
Backbone将根据需要从服务器发送或接收的内容在同一个URL上调用GET,POST,DELETE等。因此,如果要构建REST API,则控制器或路由器应将相应的函数路由到这些方法。请参阅下面的确切映射:
create → POST /collection
read → GET /collection[/id]
update → PUT /collection/id
delete → DELETE /collection/id
作为旁注,如果您无法控制从服务器返回的JOSN,您可以在解析函数中以任何您喜欢的格式对其进行格式化。
parse: function(response) { return response.itemYouWantAdded; }
如果您的服务器返回对象中的对象(例如twitter feed),则会出现这种情况。
或者您可以在解析函数
中手动填充响应中的模型parse: function(response) { var tmpModel = {
item1:response.item1,
item2:response.item2
};
return tmpModel; }
希望这会有所帮助。
答案 2 :(得分:1)
您可以set a URL for your model或your collection。然后,当您运行fetch时,它会将您的JSON直接读入单个模型或模型集合中。因此,在您的情况下,您的收藏可能看起来像
var collection = Backbone.Collection.extend({
url: '..data/data.json',
model: model
});
collection.fetch(); // Could also use collection.reset()
您只需要确保正确格式化JSON以匹配模型的属性。