backbone.js - 如何获取本地或服务器数据

时间:2013-01-18 10:52:39

标签: backbone.js

我对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);
  }
});

3 个答案:

答案 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 modelyour collection。然后,当您运行fetch时,它会将您的JSON直接读入单个模型或模型集合中。因此,在您的情况下,您的收藏可能看起来像

var collection = Backbone.Collection.extend({
    url: '..data/data.json',
    model: model
});

collection.fetch(); // Could also use collection.reset()

您只需要确保正确格式化JSON以匹配模型的属性。