3

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

3 回答 3

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();

有关更多信息,请参阅此帖子

于 2013-01-18T11:10:22.667 回答
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 函数中将其格式化为您喜欢的任何格式。

parse: function(response) { return response.itemYouWantAdded; }

如果您的服务器正在返回对象中的对象,例如 twitter 提要,就会出现这种情况。

或者您可以简单地在解析函数中手动从响应中填充模型

parse: function(response) { var tmpModel = { 
                            item1:response.item1, 
                            item2:response.item2 
                            }; 
return tmpModel;  }

希望这可以帮助。

于 2013-01-19T00:18:28.600 回答
1

您可以为您的模型您的收藏设置一个 URL 。然后,当您运行fetch时,它会将您的 JSON 直接读取到单个模型或模型集合中。所以在你的情况下,你的收藏可能看起来像

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

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

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

于 2013-01-18T11:09:00.203 回答