2012-07-26 32 views
0

我有一個由UsersView(列表)處理的UserCollection。單個元素,模型以UserView的形式處理。如何刪除提取的項目視圖?

當我現在獲取一個新的UserCollection(其他url)比收集對象本身更新(包含新的用戶模型),但HTML列表仍然存在。

的ListView:

var ContactsView = Backbone.View.extend({ 
     tagName: "ul", 
     className: "contacts unstyled", 
     events: { 

     }, 
     initialize: function() { 
      this.collection = new UserCollection(); 
      this.collection.bind('add', this.addContact, this); 
      this.collection.bind('remove', this.removeContact, this); // not getting called 
      this.collection.bind('reset', this.listContacts, this); 
      this.collection.fetch(); 
     }, 
     render: function() { 
      this.$el.html(); 

      return this; 
     }, 
     listContacts: function(contacts) { 
      contacts.each(function(contact) { 
       this.$el.append(new ContactView({ model: contact }).render().el); 
      }.bind(this)); 
     }, 
     addContact: function(contact) { 
      this.$el.append(new ContactView({ model: contact }).render().el); 
     }, 
     // this is not getting executed 
     removeContact: function(contact) { 
      console.log(["removeContact fired"]); 
      contact.unset(); 
     } 
    }); 

項目 - 視圖

var ContactView = Backbone.View.extend({ 
     tagName: "li", 
     className: "contact", 
     template: _.template(ContactTemplate), 
     events: { 
      "mouseenter li.contact": "expandOptions" 
      , "mouseleave li.contact": "collapseOptions" 
      , "click": "removeContact" 
     }, 
     initialize: function() { 
      this.model.bind('change', this.render, this); 
      this.model.bind('remove', this.remove, this); 
      this.model.bind('destroy', this.remove, this); 
      this.model.bind('unset', this.remove, this); 
     }, 
     render: function() { 
      this.$el.html(this.template(this.model.toJSON())); 

      return this; 
     }, 
     expandOptions: function() { 

     }, 
     collapseOptions: function() { 

     }, 
     removeContact: function(e) { 
      this.model.destroy(); 
     } 
    }); 

所以這事件時Backbone.Collection內刪除項目被觸發(例如讀取)和我怎麼聽呢?

+0

首先,綁定這個(info:http://backbonejs.org/#FAQ-this),最好用'_.bindAll'函數。然後,在所有每個類型函數之前,執行'var self = this;',並且你想調用它的任何地方(就像你在每個函數中調用的函數一樣)使用'self'。 – jakee 2012-07-26 09:34:27

+0

然後看看它是否工作不正常 – jakee 2012-07-26 09:34:45

+0

@jakee爲什麼自我建議over.bind(this)? – bodokaiser 2012-07-26 12:02:40

回答

1

集合獲取the model data returns from the server的收集調用reset()並觸發reset事件。

所以是在你的reset綁定你必須空()你的DOM元素。在你的情況下你的listContacts()

+0

嗨,但即使當我在列表之前進行渲染時,沒有任何變化。我也不能認爲保持所有的產品視圖是一個好主意嗎? – bodokaiser 2012-07-26 09:26:05

+0

@kyogron [jQuery.html()](http://api.jquery.com/html/)不會清理DOM內容,而是返回它。使用[jQuery.empty()](http://api.jquery.com/empty/)。 – fguillen 2012-07-26 09:32:28

+0

好的,我做到了。我還需要從提取選項中刪除{add:true,remove:true}。然而關於記憶的東西是什麼。從文檔中刪除但未設置的視圖會發生什麼? – bodokaiser 2012-07-26 09:37:40

相關問題