0

重複の可能性:
Backbone.js - 名前の変更中に変更がトリガーされない

次の関数では、コンソールにデータが表示されますが、ボディタグに何も追加されていないため、誰でも問題を見つけることができます..

私のjson:

[
    {name:'student4'},
    {name:'student5'},
    {name:'student6'}
]

コード:

    (function($){   
var model = Backbone.Model.extend({
  defaults:{
    name:'default name'
  }
});

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



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();
    this.collection.on("reset", this.render, this);
    this.collection.fetch();
  },
  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); //nothing rendering
  }
});


var stView = new view();

})(jQuery)
4

1 に答える 1

0

問題は次の 2 行にあるようです。

this.collection.fetch(); //it seems it's not fetching;
this.render();  

Collection.fetch非同期操作です。ビューを表示するまでrenderに、リクエストはまだ返されていないため、コレクションは空です。代わりに render メソッドを collectionsresetイベントにバインドしてみてください:

collection.on("reset", this.render, this);
this.collection.fetch();
于 2013-01-18T12:26:22.457 に答える