Upgrade to ExtJS 4.0.7 - Released 10/19/2011
[extjs.git] / docs / source / Model2.html
index 4d1ae62..7a717ec 100644 (file)
@@ -3,8 +3,8 @@
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title>The source code</title>
-  <link href="../prettify/prettify.css" type="text/css" rel="stylesheet" />
-  <script type="text/javascript" src="../prettify/prettify.js"></script>
+  <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>
 </head>
 <body onload="prettyPrint(); highlight();">
   <pre class="prettyprint lang-js"><span id='Ext-selection-Model'>/**
-</span> * @class Ext.selection.Model
- * @extends Ext.util.Observable
+</span> * Tracks what records are currently selected in a databound component.
  *
- * Tracks what records are currently selected in a databound widget.
+ * This is an abstract class and is not meant to be directly used. Databound UI widgets such as
+ * {@link Ext.grid.Panel Grid} and {@link Ext.tree.Panel Tree} should subclass Ext.selection.Model
+ * and provide a way to binding to the component.
  *
- * This is an abstract class and is not meant to be directly used.
- *
- * DataBound UI widgets such as GridPanel, TreePanel, and ListView
- * should subclass AbstractStoreSelectionModel and provide a way
- * to binding to the component.
- *
- * The abstract methods onSelectChange and onLastFocusChanged should
- * be implemented in these subclasses to update the UI widget.
+ * The abstract methods `onSelectChange` and `onLastFocusChanged` should be implemented in these
+ * subclasses to update the UI widget.
  */
 Ext.define('Ext.selection.Model', {
     extend: 'Ext.util.Observable',
@@ -38,24 +33,28 @@ Ext.define('Ext.selection.Model', {
 
 <span id='Ext-selection-Model-cfg-mode'>    /**
 </span>     * @cfg {String} mode
-     * Modes of selection.
-     * Valid values are SINGLE, SIMPLE, and MULTI. Defaults to 'SINGLE'
+     * Mode of selection.  Valid values are:
+     *
+     * - **SINGLE** - Only allows selecting one item at a time.  Use {@link #allowDeselect} to allow
+     *   deselecting that item.  This is the default.
+     * - **SIMPLE** - Allows simple selection of multiple items one-by-one. Each click in grid will either
+     *   select or deselect an item.
+     * - **MULTI** - Allows complex selection of multiple items using Ctrl and Shift keys.
      */
 
 <span id='Ext-selection-Model-cfg-allowDeselect'>    /**
 </span>     * @cfg {Boolean} allowDeselect
-     * Allow users to deselect a record in a DataView, List or Grid. Only applicable when the SelectionModel's mode is 'SINGLE'. Defaults to false.
+     * Allow users to deselect a record in a DataView, List or Grid.
+     * Only applicable when the {@link #mode} is 'SINGLE'.
      */
     allowDeselect: false,
 
 <span id='Ext-selection-Model-property-selected'>    /**
-</span>     * @property selected
-     * READ-ONLY A MixedCollection that maintains all of the currently selected
-     * records.
+</span>     * @property {Ext.util.MixedCollection} selected
+     * A MixedCollection that maintains all of the currently selected records. Read-only.
      */
     selected: null,
 
-
 <span id='Ext-selection-Model-property-pruneRemoved'>    /**
 </span>     * Prune records when they are removed from the store from the selection.
      * This is a private flag. For an example of its usage, take a look at
@@ -72,12 +71,12 @@ Ext.define('Ext.selection.Model', {
 
         me.addEvents(
 <span id='Ext-selection-Model-event-selectionchange'>            /**
-</span>             * @event selectionchange
+</span>             * @event
              * Fired after a selection change has occurred
              * @param {Ext.selection.Model} this
-             * @param  {Array} selected The selected records
+             * @param {Ext.data.Model[]} selected The selected records
              */
-             'selectionchange'
+            'selectionchange'
         );
 
         me.modes = {
@@ -101,7 +100,7 @@ Ext.define('Ext.selection.Model', {
 
         if(!initial &amp;&amp; me.store){
             if(store !== me.store &amp;&amp; me.store.autoDestroy){
-                me.store.destroy();
+                me.store.destroyStore();
             }else{
                 me.store.un(&quot;add&quot;, me.onStoreAdd, me);
                 me.store.un(&quot;clear&quot;, me.onStoreClear, me);
@@ -126,8 +125,8 @@ Ext.define('Ext.selection.Model', {
     },
 
 <span id='Ext-selection-Model-method-selectAll'>    /**
-</span>     * Select all records in the view.
-     * @param {Boolean} suppressEvent True to suppress any selects event
+</span>     * Selects all records in the view.
+     * @param {Boolean} suppressEvent True to suppress any select events
      */
     selectAll: function(suppressEvent) {
         var me = this,
@@ -146,7 +145,7 @@ Ext.define('Ext.selection.Model', {
     },
 
 <span id='Ext-selection-Model-method-deselectAll'>    /**
-</span>     * Deselect all records in the view.
+</span>     * Deselects all records in the view.
      * @param {Boolean} suppressEvent True to suppress any deselect events
      */
     deselectAll: function(suppressEvent) {
@@ -209,7 +208,7 @@ Ext.define('Ext.selection.Model', {
      * All rows in between startRow and endRow are also selected.
      * @param {Ext.data.Model/Number} startRow The record or index of the first row in the range
      * @param {Ext.data.Model/Number} endRow The record or index of the last row in the range
-     * @param {Boolean} keepExisting (optional) True to retain existing selections
+     * @param {Boolean} [keepExisting] True to retain existing selections
      */
     selectRange : function(startRow, endRow, keepExisting, dir){
         var me = this,
@@ -268,18 +267,21 @@ Ext.define('Ext.selection.Model', {
 
 <span id='Ext-selection-Model-method-select'>    /**
 </span>     * Selects a record instance by record instance or index.
-     * @param {Ext.data.Model/Index} records An array of records or an index
-     * @param {Boolean} keepExisting
-     * @param {Boolean} suppressEvent Set to false to not fire a select event
+     * @param {Ext.data.Model[]/Number} records An array of records or an index
+     * @param {Boolean} [keepExisting] True to retain existing selections
+     * @param {Boolean} [suppressEvent] Set to true to not fire a select event
      */
     select: function(records, keepExisting, suppressEvent) {
-        this.doSelect(records, keepExisting, suppressEvent);
+        // Automatically selecting eg store.first() or store.last() will pass undefined, so that must just return;
+        if (Ext.isDefined(records)) {
+            this.doSelect(records, keepExisting, suppressEvent);
+        }
     },
 
 <span id='Ext-selection-Model-method-deselect'>    /**
 </span>     * Deselects a record instance by record instance or index.
-     * @param {Ext.data.Model/Index} records An array of records or an index
-     * @param {Boolean} suppressEvent Set to false to not fire a deselect event
+     * @param {Ext.data.Model[]/Number} records An array of records or an index
+     * @param {Boolean} [suppressEvent] Set to true to not fire a deselect event
      */
     deselect: function(records, suppressEvent) {
         this.doDeselect(records, suppressEvent);
@@ -368,7 +370,7 @@ Ext.define('Ext.selection.Model', {
         }
 
         len = records.length;
-        
+
         for (; i &lt; len; i++) {
             record = records[i];
             if (me.isSelected(record)) {
@@ -423,9 +425,9 @@ Ext.define('Ext.selection.Model', {
     },
 
 <span id='Ext-selection-Model-method-setLastFocused'>    /**
-</span>     * @param {Ext.data.Model} record
-     * Set a record as the last focused record. This does NOT mean
+</span>     * Sets a record as the last focused record. This does NOT mean
      * that the record has been selected.
+     * @param {Ext.data.Model} record
      */
     setLastFocused: function(record, supressFocus) {
         var me = this,
@@ -436,7 +438,7 @@ Ext.define('Ext.selection.Model', {
 
 <span id='Ext-selection-Model-method-isFocused'>    /**
 </span>     * Determines if this record is currently focused.
-     * @param Ext.data.Record record
+     * @param {Ext.data.Model} record
      */
     isFocused: function(record) {
         return record === this.getLastFocused();
@@ -465,22 +467,23 @@ Ext.define('Ext.selection.Model', {
 
 <span id='Ext-selection-Model-method-getSelection'>    /**
 </span>     * Returns an array of the currently selected records.
-     * @return {Array} The selected records
+     * @return {Ext.data.Model[]} The selected records
      */
     getSelection: function() {
         return this.selected.getRange();
     },
 
 <span id='Ext-selection-Model-method-getSelectionMode'>    /**
-</span>     * Returns the current selectionMode. SINGLE, MULTI or SIMPLE.
-     * @return {String} The selectionMode
+</span>     * Returns the current selectionMode.
+     * @return {String} The selectionMode: 'SINGLE', 'MULTI' or 'SIMPLE'.
      */
     getSelectionMode: function() {
         return this.selectionMode;
     },
 
 <span id='Ext-selection-Model-method-setSelectionMode'>    /**
-</span>     * Sets the current selectionMode. SINGLE, MULTI or SIMPLE.
+</span>     * Sets the current selectionMode.
+     * @param {String} selModel 'SINGLE', 'MULTI' or 'SIMPLE'.
      */
     setSelectionMode: function(selMode) {
         selMode = selMode ? selMode.toUpperCase() : 'SINGLE';
@@ -498,17 +501,16 @@ Ext.define('Ext.selection.Model', {
     },
 
 <span id='Ext-selection-Model-method-setLocked'>    /**
-</span>     * Locks the current selection and disables any changes from
-     * happening to the selection.
-     * @param {Boolean} locked
+</span>     * Locks the current selection and disables any changes from happening to the selection.
+     * @param {Boolean} locked  True to lock, false to unlock.
      */
     setLocked: function(locked) {
         this.locked = !!locked;
     },
 
 <span id='Ext-selection-Model-method-isSelected'>    /**
-</span>     * Returns &lt;tt&gt;true&lt;/tt&gt; if the specified row is selected.
-     * @param {Record/Number} record The record or index of the record to check
+</span>     * Returns true if the specified row is selected.
+     * @param {Ext.data.Model/Number} record The record or index of the record to check
      * @return {Boolean}
      */
     isSelected: function(record) {
@@ -614,7 +616,7 @@ Ext.define('Ext.selection.Model', {
     },
 
 <span id='Ext-selection-Model-method-getCount'>    /**
-</span>     * Gets the count of selected records.
+</span>     * Returns the count of selected records.
      * @return {Number} The number of selected records
      */
     getCount: function() {