【发布时间】:2015-02-24 16:45:35
【问题描述】:
我是 Backbone 的新手。 我想显示一个股票列表,用户可以在其中打开列表中的任何股票并更改股票价值。之后,整个列表应刷新以显示更改的值。
所以我发现最好不仅创建集合,而且创建集合和库存模型列表。
为此,我为主表创建了一个库存集合视图和一个库存模型视图,用于向表中添加行,其中每一行都是一个模型。
所以这是一个集合视图:
App.Views.StockTable = Backbone.View.extend({
...
initialize: function() {
this.render();
},
render: function() {
this.$el.html(this.template(this.collection));
this.addAll();
return this;
},
addOne: function(stock) {
var row = new App.Views.StockRow({
model: stock,
suppliers: this.suppliers
});
return this;
},
addAll: function() {
var suppliers = new App.Collections.Suppliers();
var that = this;
suppliers.fetch({
success: function() {
_.each(that.collection.toJSON(), that.addOne, that);
}
});
return this;
}
});
这是我的股票行视图:
App.Views.StockRow = Backbone.View.extend({
el: 'tbody',
templateRow: _.template($('#stockRow').html()),
templatePreview: _.template($('#stockPreview').html()),
events: {
'click #open': 'open'
...
},
initialize: function() {
this.render();
},
render: function() {
this.$el.append(this.templateRow(this.model))
.append(this.templatePreview({
stock: this.model,
suppliers: this.suppliers
}));
return this;
},
open: function(e) {
var element = $(e.currentTarget);
element.attr('id', 'hide');
$('#stock' + element.data('id')).slideToggle('fast');
}
...
});
我只写了一段代码。问题是,当我单击“#open”时,该事件会触发多次(正确的集合中的数量元素)。因此,当我捕获 e.currentTarget 时,会有许多类似的对象。 我做错了什么?
【问题讨论】: