<!DOCTYPE html>
|
<html>
|
<head>
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<title>The source code</title>
|
<link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
|
<script type="text/javascript" src="../resources/prettify/prettify.js"></script>
|
<style type="text/css">
|
.highlight { display: block; background-color: #ddd; }
|
</style>
|
<script type="text/javascript">
|
function highlight() {
|
document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
|
}
|
</script>
|
</head>
|
<body onload="prettyPrint(); highlight();">
|
<pre class="prettyprint lang-js"><span id='Ext-selection-DataViewModel'>/**
|
</span> * @private
|
*/
|
Ext.define('Ext.selection.DataViewModel', {
|
extend: 'Ext.selection.Model',
|
|
requires: ['Ext.util.KeyNav'],
|
|
<span id='Ext-selection-DataViewModel-property-deselectOnContainerClick'> deselectOnContainerClick: true,
|
</span>
|
<span id='Ext-selection-DataViewModel-cfg-enableKeyNav'> /**
|
</span> * @cfg {Boolean} enableKeyNav
|
*
|
* Turns on/off keyboard navigation within the DataView.
|
*/
|
enableKeyNav: true,
|
|
<span id='Ext-selection-DataViewModel-method-constructor'> constructor: function(cfg){
|
</span> this.addEvents(
|
<span id='Ext-selection-DataViewModel-event-beforedeselect'> /**
|
</span> * @event beforedeselect
|
* Fired before a record is deselected. If any listener returns false, the
|
* deselection is cancelled.
|
* @param {Ext.selection.DataViewModel} this
|
* @param {Ext.data.Model} record The deselected record
|
*/
|
'beforedeselect',
|
|
<span id='Ext-selection-DataViewModel-event-beforeselect'> /**
|
</span> * @event beforeselect
|
* Fired before a record is selected. If any listener returns false, the
|
* selection is cancelled.
|
* @param {Ext.selection.DataViewModel} this
|
* @param {Ext.data.Model} record The selected record
|
*/
|
'beforeselect',
|
|
<span id='Ext-selection-DataViewModel-event-deselect'> /**
|
</span> * @event deselect
|
* Fired after a record is deselected
|
* @param {Ext.selection.DataViewModel} this
|
* @param {Ext.data.Model} record The deselected record
|
*/
|
'deselect',
|
|
<span id='Ext-selection-DataViewModel-event-select'> /**
|
</span> * @event select
|
* Fired after a record is selected
|
* @param {Ext.selection.DataViewModel} this
|
* @param {Ext.data.Model} record The selected record
|
*/
|
'select'
|
);
|
this.callParent(arguments);
|
},
|
|
<span id='Ext-selection-DataViewModel-method-bindComponent'> bindComponent: function(view) {
|
</span> var me = this,
|
eventListeners = {
|
refresh: me.refresh,
|
scope: me
|
};
|
|
me.view = view;
|
me.bindStore(view.getStore());
|
|
eventListeners[view.triggerEvent] = me.onItemClick;
|
eventListeners[view.triggerCtEvent] = me.onContainerClick;
|
|
view.on(eventListeners);
|
|
if (me.enableKeyNav) {
|
me.initKeyNav(view);
|
}
|
},
|
|
<span id='Ext-selection-DataViewModel-method-onUpdate'> onUpdate: function(record){
|
</span> var view = this.view;
|
if (view && this.isSelected(record)) {
|
view.onItemSelect(record);
|
}
|
},
|
|
<span id='Ext-selection-DataViewModel-method-onItemClick'> onItemClick: function(view, record, item, index, e) {
|
</span> this.selectWithEvent(record, e);
|
},
|
|
<span id='Ext-selection-DataViewModel-method-onContainerClick'> onContainerClick: function() {
|
</span> if (this.deselectOnContainerClick) {
|
this.deselectAll();
|
}
|
},
|
|
<span id='Ext-selection-DataViewModel-method-initKeyNav'> initKeyNav: function(view) {
|
</span> var me = this;
|
|
if (!view.rendered) {
|
view.on({
|
render: Ext.Function.bind(me.initKeyNav, me, [view]),
|
single: true
|
});
|
return;
|
}
|
|
view.el.set({
|
tabIndex: -1
|
});
|
me.keyNav = new Ext.util.KeyNav({
|
target: view.el,
|
ignoreInputFields: true,
|
down: Ext.pass(me.onNavKey, [1], me),
|
right: Ext.pass(me.onNavKey, [1], me),
|
left: Ext.pass(me.onNavKey, [-1], me),
|
up: Ext.pass(me.onNavKey, [-1], me),
|
scope: me
|
});
|
},
|
|
<span id='Ext-selection-DataViewModel-method-onNavKey'> onNavKey: function(step) {
|
</span> step = step || 1;
|
var me = this,
|
view = me.view,
|
selected = me.getSelection()[0],
|
numRecords = me.view.store.getCount(),
|
idx;
|
|
if (selected) {
|
idx = view.indexOf(view.getNode(selected)) + step;
|
} else {
|
idx = 0;
|
}
|
|
if (idx < 0) {
|
idx = numRecords - 1;
|
} else if (idx >= numRecords) {
|
idx = 0;
|
}
|
|
me.select(idx);
|
},
|
|
<span id='Ext-selection-DataViewModel-method-onSelectChange'> // Allow the DataView to update the ui
|
</span> onSelectChange: function(record, isSelected, suppressEvent, commitFn) {
|
var me = this,
|
view = me.view,
|
eventName = isSelected ? 'select' : 'deselect';
|
|
if ((suppressEvent || me.fireEvent('before' + eventName, me, record)) !== false &&
|
commitFn() !== false) {
|
|
if (view) {
|
if (isSelected) {
|
view.onItemSelect(record);
|
} else {
|
view.onItemDeselect(record);
|
}
|
}
|
|
if (!suppressEvent) {
|
me.fireEvent(eventName, me, record);
|
}
|
}
|
},
|
|
<span id='Ext-selection-DataViewModel-method-onLastFocusChanged'> onLastFocusChanged: function(oldFocus, newFocus, suppressFocus){
|
</span> var view = this.view;
|
if (view && !suppressFocus && newFocus) {
|
view.focusNode(newFocus);
|
this.fireEvent('focuschange', this, oldFocus, newFocus);
|
}
|
},
|
|
<span id='Ext-selection-DataViewModel-method-destroy'> destroy: function(){
|
</span> Ext.destroy(this.keyNav);
|
this.callParent();
|
}
|
});
|
</pre>
|
</body>
|
</html>
|