0

backbone.jsと口ひげでDjangoとtastypieを使用しようとしています。それらを研究するための例を設定しました。以下のコードを使用すると、ユーザーが次のように倍増した結果が得られます。

  • -Id ユーザー名
  • -1歳
  • -2 ダダ
  • -1歳
  • -2 ダダ

--- 私のコード ---

// I think this tastypie adjustment is not related with the problem but i want you to see the //whole code

window.TastypieModel = Backbone.Model.extend({
        base_url: function() {
          var temp_url = Backbone.Model.prototype.url.call(this);
          return (temp_url.charAt(temp_url.length - 1) == '/' ? temp_url : temp_url+'/');
        },

        url: function() {
          return this.base_url();
        }
    });

    window.TastypieCollection = Backbone.Collection.extend({
        parse: function(response) {
            this.recent_meta = response.meta || {};
            return response.objects || response;
        }
});


(function($){



// MODELS-COLLECTIOS
  //USERS
  var User = TastypieModel.extend({
      url: USERS_API
  });

  var Users = TastypieCollection.extend({
      model: User,
      url:USERS_API
  });



//VIEWS
  var UsersView = Backbone.View.extend({
    render: function(){
         // template with ICanHaz.js (ich)
        this.el = ich.userRowTpl(this.model.toJSON());
        return this;
       }
  });





//main app
  var AppView = Backbone.View.extend({
      tagName: 'tbody',
      initialize: function() {
          this.users = new Users();
          this.users.bind('all', this.render, this);
          this.users.fetch();
      },

      render: function () {

          // template with ICanHaz.js (ich)
          this.users.each(function (user) {
             $(this.el).append(new UsersView({model: user}).render().el);
          }, this);



          return this;
      }
  });

  var app = new AppView();
  $('#app').append(app.render().el);






})(jQuery);
4

1 に答える 1

2

ビューはすべてのイベントをリッスンしているため、レンダリングを 2 回実行していると思います。代わりに、リセットするためだけにバインドして、様子を見てください。

initialize: function() {
  this.users = new Users();
  this.users.bind('reset', this.render, this);
  this.users.fetch();
},
于 2013-03-11T14:35:47.663 に答える