我使用Ext.view.View作为我的数据视图。当我选择一个项目'selectionchange'事件触发器两次。但是如果没有“multiSelect:true”,它只会触发一次。
Ext.define('myViewView', {
extend: 'Ext.view.View',
alias: 'widget.myViewView',
store: myContentStore,
cls: 'content-view-view',
tpl: myContentViewTpl,
multiSelect: true,
trackOver: true,
overItemCls: 'x-item-over',
itemSelector: '.thumb-wrap',
emptyText: emptyDataText,
resizable: true,
style: {
overflow: 'auto'
},
listeners: {
selectionchange: function(dv, selections) {
}
},
prepareData: function(data) {
Ext.apply(data, {
sizeString: Ext.util.Format.fileSize(data.size),
modifiedString: Ext.util.Format.date(data.modified, "m-d-Y:g-i-a"),
fileFormatPath: createBreadCrumb(data.filePath, false)
});
return data;
}
});
答案 0 :(得分:2)
只有在您选择其他内容时才会触发两次(例如,您选择了一行并选择了另一行)。因为取消选择第一行而触发第一个事件,而在真正选择其他行之后触发第二个事件。 最简单的解决方案是为事件处理程序设置缓冲区。
示例:
listView.on('selectionchange', function(view, nodes){
// handler
}, this, { buffer: 10 });
或
listeners: {
selectionchange: function() {
// handler
},
buffer: 10
}