我正在使用Code School Backbone教程中的代碼,並且我從他們的示例中使用了一些代碼,這些代碼已適用於我自己的目的似乎不起作用。基本上,我添加了一個監聽器來添加一個新的模型到集合中,這很好,但是當我添加了刪除監聽器時,它似乎刪除了我的所有視圖。我認爲這個問題與我認爲的「el:'.monster'」有關,但我沒有找到合適的組合來解決它。移除主幹視圖時遇到的問題
下面是代碼:
// MODEL
var Monster = Backbone.Model.extend({
defaults: {
name: '',
health: '',
defense: '',
attack: '',
damage: ''
}
});
// COLLECTION
var MonsterList = Backbone.Collection.extend({
model: Monster,
url: '/monsters',
initialize: function() {
this.on('remove', this.hideModel);
},
hideModel: function(model) {
model.trigger('hide');
}
});
var monsterList = new MonsterList();
var monsters = [
{name: 'Gobby', health: 10, defense: 10, attack: 5, damage: 4},
{name: 'Clobber', health: 15, defense: 10, attack: 7, damage: 4},
{name: 'Gumms', health: 9, defense: 10, attack: 5, damage: 2}
];
monsterList.reset(monsters);
// VIEW
var MonsterView = Backbone.View.extend({
el: '.monster',
template: _.template('<table>' +
'<th><%= name %></th>' +
'<tr><td>Health</td> <td><%= health %></td>' +
'<td>Defense</td><td><%= defense %></td></tr>' +
'<tr><td>Attack</td><td><%= attack %></td>' +
'<td>Damage</td><td><%= damage %></td><tr>' +
'</table>'
),
initialize: function() {
this.model.on('hide', this.remove, this);
},
remove: function() {
this.$el.remove();
},
render: function(){
this.$el.append(this.template(this.model.toJSON()));
}
});
var MonsterListView = Backbone.View.extend({
initialize: function() {
this.collection.on('add', this.addOne, this);
this.collection.on('reset', this.addAll, this);
},
addOne: function(monster) {
var monsterView = new MonsterView({model: monster});
this.$el.append(monsterView.render());
},
addAll: function() {
this.collection.forEach(this.addOne, this);
},
render: function() {
this.addAll();
}
});
var monsterListView = new MonsterListView({collection: monsterList});
monsterListView.render();
HTML文件只是一個空div與類 '怪物'。任何幫助引導我朝着正確的方向的東西將不勝感激!
你的意思是它不顯示任何東西? – jrsalunga
是的,當我嘗試刪除其中一個視圖時,它將刪除所有視圖。 – EmptyArsenal
你如何刪除視圖?在控制檯上? – jrsalunga