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

バックボーンは、サーバーから何を送受信する必要があるかに応じて、同じ 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 フィードなど) を返す場合に当てはまります。

または、解析関数で手動で応答からモデルを設定することもできます

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 に答える