2 * @class Ext.selection.DataViewModel
5 Ext.define('Ext.selection.DataViewModel', {
6 extend: 'Ext.selection.Model',
8 requires: ['Ext.util.KeyNav'],
10 deselectOnContainerClick: true,
13 * @cfg {Boolean} enableKeyNav
15 * Turns on/off keyboard navigation within the DataView. Defaults to true.
19 constructor: function(cfg){
23 * Fired after a record is deselected
24 * @param {Ext.selection.DataViewModel} this
25 * @param {Ext.data.Model} record The deselected record
31 * Fired after a record is selected
32 * @param {Ext.selection.DataViewModel} this
33 * @param {Ext.data.Model} record The selected record
37 this.callParent(arguments);
40 bindComponent: function(view) {
48 me.bind(view.getStore());
50 view.on(view.triggerEvent, me.onItemClick, me);
51 view.on(view.triggerCtEvent, me.onContainerClick, me);
53 view.on(eventListeners);
55 if (me.enableKeyNav) {
60 onItemClick: function(view, record, item, index, e) {
61 this.selectWithEvent(record, e);
64 onContainerClick: function() {
65 if (this.deselectOnContainerClick) {
70 initKeyNav: function(view) {
74 view.on('render', Ext.Function.bind(me.initKeyNav, me, [view], 0), me, {single: true});
81 me.keyNav = Ext.create('Ext.util.KeyNav', view.el, {
82 down: Ext.pass(me.onNavKey, [1], me),
83 right: Ext.pass(me.onNavKey, [1], me),
84 left: Ext.pass(me.onNavKey, [-1], me),
85 up: Ext.pass(me.onNavKey, [-1], me),
90 onNavKey: function(step) {
94 selected = me.getSelection()[0],
95 numRecords = me.view.store.getCount(),
99 idx = view.indexOf(view.getNode(selected)) + step;
105 idx = numRecords - 1;
106 } else if (idx >= numRecords) {
113 // Allow the DataView to update the ui
114 onSelectChange: function(record, isSelected, suppressEvent) {
120 if (!suppressEvent) {
121 allowSelect = me.fireEvent('beforeselect', me, record) !== false;
124 view.onItemSelect(record);
125 if (!suppressEvent) {
126 me.fireEvent('select', me, record);
130 view.onItemDeselect(record);
131 if (!suppressEvent) {
132 me.fireEvent('deselect', me, record);