2013-10-27 2 views
0

Я искал и нашел некоторые подсказки о том, как удалить представление из DOM, например Zombie RUN! и других сообщений. После этого я выбрал один из них, чтобы сделать here the link.Извлечение представления из DOM в основу

Вот мое мнение:

var HomeView = Backbone.View.extend({ 
    initialize: function() { 
     myCart1.updateQtyLabel("qtyCart"); 
     window.localStorage.setItem("User",serializeObjToJSON(customer)); 
    }, 
    el: '#webbodycontainer', 
    events : { 
     "click #addToCart" : function(){ 
      myCart1.addToCart(newItem); 
      myCart1.updateQtyLabel("qtyCart"); 
      $("#containernewpromotion").html(promotionItem); 
     } 
    }, 
    render : function(){ 
     this.$el.html(homePanel); 
     $("#containernewpromotion").html(promotionItem); 
    }, 
    remove: function() { 
     this.undelegateEvents(); 
     this.$el.empty(); 
     this.stopListening(); 
     return this; 
    } 
}); 
return HomeView; 

И это мой маршрутизатор:

app_router.on('route:home', function(){ 
    var homeView = new HomeView(); 
    homeView.remove(); 
    homeView = new HomeView(); 
    homeView.render(); 
}); 

Но вид все еще остаются в моем DOM. Подумайте над этим вопросом. Благодарю.

+0

Вы удаляете его перед вставкой в ​​DOM. – HungryCoder

ответ

2

Проблема здесь:

app_router.on('route:home', function(){ 
    var homeView = new HomeView(); 
    homeView.remove(); 
    homeView = new HomeView(); 
    homeView.render(); 
}); 

В строке # 3, вы вызываете remove() метод. В строке # 4 вы создаете экземпляр снова и в строке # 5, вы вставляете в DOM.

Вы должны позвонить remove после render. Однако, если вы сразу вызываете remove, вы можете ничего не увидеть в DOM. Ниже приведен пример удаления элементов из DOM, при нажатии на нее

var HomeView = Backbone.View.extend({ 
..... 
    events : { 
     "click #addToCart" : function(){ 
      myCart1.addToCart(newItem); 
      myCart1.updateQtyLabel("qtyCart"); 
      $("#containernewpromotion").html(promotionItem); 
     }, 
     'click': 'remove' 
    }, 
...... 
}); 

Теперь, вы можете сделать это следующим образом:

app_router.on('route:home', function(){ 
    var homeView = new HomeView(); 
    homeView.render(); 
}); 

Теперь вы должны увидеть элементы на странице. Когда вы нажимаете на них, их следует удалить.

+0

Итак, где я должен вызывать функцию 'remove()' моего 'HomeView'? – Nothing

+0

в моем коде, вы видите, что я добавил '' click ':' remove'' line. Вы можете вызвать метод remove из любого места, если в вашем контексте есть переменная 'homeView'. – HungryCoder

+0

Я также пропустил 'this. $ El.empty();' из моей функции. – Nothing

Смежные вопросы