2013-09-09 2 views
3

Я выяснил свою проблему, но хотел бы знать , почему, чтобы я мог (надеюсь) понять марионетку/позвоночник лучше.Marionette CollectionView переориентация при удалении модели из коллекции

Проблема ниже код делает обновить представление, когда элемент удаляется:

var MainView = Marionette.ItemView.extend({ 
    template: "#sample-template", 
    events :{ 
     "click #remove" : "remove" 
    }, 
    remove: function(){    
     this.trigger("property:remove", this.model); 
    } 
}); 
var CollectionView = Marionette.CollectionView.extend({ 
    itemView: MainView, 
    initialize: function(){ 
     this.on("itemview:property:remove", function(view, model){ 
      alert(this.collection.length); 
      this.collection.remove(model); 
      alert(this.collection.length); 
     }); 
    } 
}); 

A JsFiddle to view in all its glory

The затруднительного ниже код делает обновление представления, как ожидалось:

var MainView = Marionette.ItemView.extend({ 
    template: "#sample-template", 
    triggers :{ 
     "click #remove" : "property:remove" 
    }, 
}); 

var CollectionView = Marionette.CollectionView.extend({ 
    itemView: MainView, 
    initialize: function(){ 
     this.on("itemview:property:remove", function(view, model){ 
      alert(this.collection.length); 
      this.collection.remove(view.model); 
      alert(this.collection.length); 
     }); 
    } 
}); 

The jsFiddle

ответ

5

Backbone.View определяет метод, называемый remove, который удаляет вид из DOM. Ваш первый пример переопределяет этот метод.

Если вы переименовали remove на что-то вроде removeIt, то столкновение имен исчезнет, ​​и код работает должным образом. Для чего это стоит, я думаю, что второй подход предпочтительнее для такого типа ситуации.

+1

То есть. Мне нравится, как трясутся твои вещи. И да, второй вариант - более чистый. Благодарю. – mlsteeves

+0

Добро пожаловать! Этот тоже подстегнул меня. –

3

Для всех, кто сталкивается с этим, имейте в виду, что Marionette 2.x изменил itemview на childview. Поработал немного. Ура!