我已經基於Backbone.js的與「本」在Backbone.js的時候集合中
pg.views.ItemList = Backbone.View.extend({
tagName: "div",
className: "items",
initialize: function() {
_.bindAll(this, 'addOne', 'addSelected')
Items.bind('add', this.addOne);
Items.fetch();
},
// REMOVED
addOne: function(Item) {
console.log($(this.el));
var view = new pg.views.Item({model: Item});
$(this.el).append(view.render().el);
},
addSelected: function(ItemList) {
_.each(ItemList, this.addOne);
return this.el;
},
// REMOVED
});
pg.views.Section = Backbone.View.extend({
tagName: "section",
sectionTemplate: _.template($('#section-template').html()),
events: {
// REMOVED
},
initialize: function() {
_.bindAll(this, 'render', 'close', 'addItemToSection', 'removeItemFromSection');
this.model.bind('change', this.render);
this.model.view = this;
Items = new pg.collections.ItemList;
},
render: function() {
$(this.el).html(this.sectionTemplate(this.model.toJSON()));
this.setContent();
Items.bind('add', this.addItemToSection); // "add" event bind
Items.bind('remove', this.removeItemFromSection); // "remove" event bind
this.addItems();
return this;
},
addItems: function() {
var ids = this.model.get('items');
var view = new pg.views.ItemList;
var items = _.map(ids, function(id){ return Items.get(id); });
$(this.el).append(view.addSelected(items));
},
// FUNCTIONS REMOVED
setContent: function() {
var title = this.model.get('title');
this.$('.title').text(title);
this.title = this.$('.title-input');
this.title.val(title);
},
addItemToSection: function(Item) {
console.log(this.model.get('title'));
// REMOVED
},
removeItemFromSection: function(Item) {
console.log(this.model.get('title'));
// REMOVED
}
});
這裏以下兩個觀點結合「添加」 /「刪除」奇怪的行爲是我的問題遇到。
我有一個用戶創建兩個部分的視圖,可以說他們被稱爲「section1」和「section2」。這些名字用在他們的「title」屬性中。
這裏是奇怪的行爲,我觀察:
當用戶處於「SECTION1」和 增加和項目,「添加」綁定事件 被觸發,這導致 「第2節「正在寫入 控制檯。
當用戶處於「SECTION1」和 增加和項目,「刪除」綁定被觸發 事件,這將導致 「SECTION1」被寫入 控制檯。
當用戶在「第2節」和 增加和項目,「添加」綁定事件 被觸發,該結果 「第2節」被寫入 控制檯。
當用戶在「第2節」和 增加和項目,「刪除」綁定被觸發 事件,這將導致 「第2節」,然後「SECTION1」被寫入 控制檯。
如果我綁定「添加」使用「this.addItemToSection」中的「pg.views.Section」視圖中,不應該只調用實例裏面的「addItemToSection」塊?
我可以看到「重新定義」「this」的唯一行是「pg.views.ItemList」初始化塊中的「add」綁定。如果這條線是罪魁禍首,我該如何防止它在「section1」的「add」綁定上重新定義「this」?
我想你的問題缺乏清晰度。你能以單獨的例子重現錯誤嗎?也許把這個例子放在線上,這樣我們可以看看? – Julien 2010-12-13 15:03:48