123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237 |
- <!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-view-BoundList'>/**
- </span> * An internally used DataView for {@link Ext.form.field.ComboBox ComboBox}.
- */
- Ext.define('Ext.view.BoundList', {
- extend: 'Ext.view.View',
- alias: 'widget.boundlist',
- alternateClassName: 'Ext.BoundList',
- requires: ['Ext.layout.component.BoundList', 'Ext.toolbar.Paging'],
- <span id='Ext-view-BoundList-cfg-pageSize'> /**
- </span> * @cfg {Number} [pageSize=0]
- * If greater than `0`, a {@link Ext.toolbar.Paging} is displayed at the bottom of the list and store
- * queries will execute with page {@link Ext.data.Operation#start start} and
- * {@link Ext.data.Operation#limit limit} parameters.
- */
- pageSize: 0,
-
- <span id='Ext-view-BoundList-cfg-displayField'> /**
- </span> * @cfg {String} [displayField=""]
- * The field from the store to show in the view.
- */
- <span id='Ext-view-BoundList-property-pagingToolbar'> /**
- </span> * @property {Ext.toolbar.Paging} pagingToolbar
- * A reference to the PagingToolbar instance in this view. Only populated if {@link #pageSize} is greater
- * than zero and the BoundList has been rendered.
- */
- // private overrides
- baseCls: Ext.baseCSSPrefix + 'boundlist',
- itemCls: Ext.baseCSSPrefix + 'boundlist-item',
- listItemCls: '',
- shadow: false,
- trackOver: true,
- refreshed: 0,
-
- // This Component is used as a popup, not part of a complex layout. Display data immediately.
- deferInitialRefresh: false,
- componentLayout: 'boundlist',
- childEls: [
- 'listEl'
- ],
- renderTpl: [
- '<div id="{id}-listEl" class="{baseCls}-list-ct" style="overflow:auto"></div>',
- '{%',
- 'var me=values.$comp, pagingToolbar=me.pagingToolbar;',
- 'if (pagingToolbar) {',
- 'pagingToolbar.ownerLayout = me.componentLayout;',
- 'Ext.DomHelper.generateMarkup(pagingToolbar.getRenderTree(), out);',
- '}',
- '%}',
- {
- disableFormats: true
- }
- ],
- <span id='Ext-view-BoundList-cfg-tpl'> /**
- </span> * @cfg {String/Ext.XTemplate} tpl
- * A String or Ext.XTemplate instance to apply to inner template.
- *
- * {@link Ext.view.BoundList} is used for the dropdown list of {@link Ext.form.field.ComboBox}.
- * To customize the template you can do this:
- *
- * Ext.create('Ext.form.field.ComboBox', {
- * fieldLabel : 'State',
- * queryMode : 'local',
- * displayField : 'text',
- * valueField : 'abbr',
- * store : Ext.create('StateStore', {
- * fields : ['abbr', 'text'],
- * data : [
- * {"abbr":"AL", "name":"Alabama"},
- * {"abbr":"AK", "name":"Alaska"},
- * {"abbr":"AZ", "name":"Arizona"}
- * //...
- * ]
- * }),
- * listConfig : {
- * tpl : '<tpl for="."><div class="x-boundlist-item">{abbr}</div></tpl>'
- * }
- * });
- *
- * Defaults to:
- *
- * Ext.create('Ext.XTemplate',
- * '<ul><tpl for=".">',
- * '<li role="option" class="' + itemCls + '">' + me.getInnerTpl(me.displayField) + '</li>',
- * '</tpl></ul>'
- * );
- *
- */
- initComponent: function() {
- var me = this,
- baseCls = me.baseCls,
- itemCls = me.itemCls;
-
- me.selectedItemCls = baseCls + '-selected';
- me.overItemCls = baseCls + '-item-over';
- me.itemSelector = "." + itemCls;
- if (me.floating) {
- me.addCls(baseCls + '-floating');
- }
- if (!me.tpl) {
- // should be setting aria-posinset based on entire set of data
- // not filtered set
- me.tpl = new Ext.XTemplate(
- '<ul><tpl for=".">',
- '<li role="option" class="' + itemCls + '">' + me.getInnerTpl(me.displayField) + '</li>',
- '</tpl></ul>'
- );
- } else if (Ext.isString(me.tpl)) {
- me.tpl = new Ext.XTemplate(me.tpl);
- }
- if (me.pageSize) {
- me.pagingToolbar = me.createPagingToolbar();
- }
- me.callParent();
- },
- beforeRender: function() {
- var me = this;
- me.callParent(arguments);
- // If there's a Menu among our ancestors, then add the menu class.
- // This is so that the MenuManager does not see a mousedown in this Component as a document mousedown, outside the Menu
- if (me.up('menu')) {
- me.addCls(Ext.baseCSSPrefix + 'menu');
- }
- },
- <span id='Ext-view-BoundList-method-getBubbleTarget'> /**
- </span> * @private
- * Boundlist-specific implementation of the getBubbleTarget used by {@link Ext.AbstractComponent#up} method.
- * This links to the owning input field so that the FocusManager, when receiving notification of a hide event,
- * can find a focusable parent.
- */
- getBubbleTarget: function() {
- return this.pickerField;
- },
- getRefItems: function() {
- return this.pagingToolbar ? [ this.pagingToolbar ] : [];
- },
- createPagingToolbar: function() {
- return Ext.widget('pagingtoolbar', {
- id: this.id + '-paging-toolbar',
- pageSize: this.pageSize,
- store: this.store,
- border: false,
- ownerCt: this,
- ownerLayout: this.getComponentLayout()
- });
- },
- // Do the job of a container layout at this point even though we are not a Container.
- // TODO: Refactor as a Container.
- finishRenderChildren: function () {
- var toolbar = this.pagingToolbar;
- this.callParent(arguments);
- if (toolbar) {
- toolbar.finishRender();
- }
- },
-
- refresh: function(){
- var me = this,
- toolbar = me.pagingToolbar;
-
- me.callParent();
- // The view removes the targetEl from the DOM before updating the template
- // Ensure the toolbar goes to the end
- if (me.rendered && toolbar && toolbar.rendered && !me.preserveScrollOnRefresh) {
- me.el.appendChild(toolbar.el);
- }
- },
- bindStore : function(store, initial) {
- var toolbar = this.pagingToolbar;
-
- this.callParent(arguments);
- if (toolbar) {
- toolbar.bindStore(this.store, initial);
- }
- },
- getTargetEl: function() {
- return this.listEl || this.el;
- },
- <span id='Ext-view-BoundList-method-getInnerTpl'> /**
- </span> * A method that returns the inner template for displaying items in the list.
- * This method is useful to override when using a more complex display value, for example
- * inserting an icon along with the text.
- * @param {String} displayField The {@link #displayField} for the BoundList.
- * @return {String} The inner template
- */
- getInnerTpl: function(displayField) {
- return '{' + displayField + '}';
- },
- onDestroy: function() {
- Ext.destroyMembers(this, 'pagingToolbar', 'listEl');
- this.callParent();
- }
- });
- </pre>
- </body>
- </html>
|