@goalba

Dojo 1.2.3 and ZF1 — FilteringSelect не видит (не использует) созданный Store?

Хочу создать Store (для dojo 1.2.3), чтобы использовать 3 поля (id, name, search_me) и искать по search_me, а выводить name
Search_me - это строка, содержит дополнительную текстовую инфу - по которой и искать (type ahead) элемент dropdown-а (select-а)

Стандартный ReadStore (dojo 1.2.3) использует 2 поля (id, name)
Ищет по name и выводит name

Проблема в том, что FilteringSelect не видит (не использует) созданный Store

SomeForm.php

$this->createElement(
            'SomeElement',
            'item_id',
            array(
                'dojo' => 'searchMeStore',
//                'dojoStore' => 'zlib.data.ReadStoreWithExtendedSearch',
//                'dojoStore' => 'dojo.data.ItemFileReadStore',
                'dojoType' => 'zlib.Form.ExtendedFilteringSelect',
                'storeUrl'     => '/items.json',
                'autocomplete' => 'false',
                'style'        => 'width:33em',
            )
        );


view file
<script>

    dojo.require('zlib.data.ReadStoreWithExtendedSearch');

    if (!dojo.getObject('searchMeStore')) {
        zlib.data.ReadStoreWithExtendedSearch.prototype._getItemByIdentity = function(/* Object */ identity){
            console.log('ReadStoreWithExtendedSearch._getItemByIdentity');

            //	summary:
            //		Internal function to look an item up by its identity map.
            var item = null;
            if(this._itemsByIdentity){
                item = this._itemsByIdentity[identity];
            }else{
                item = this._arrayOfAllItems[identity];
            }
            if(item === undefined){
                item = null;
            }
            return item; // Object
        }

        var searchMeStore = new wzib.data.ReadStoreWithExtendedSearch({url: ''});

        dojo.setObject('searchMeStore', searchMeStore);
    }
    </script>


zlib.data.ReadStoreWithExtendedSearch

dojo.provide('zlib.data.ReadStoreWithExtendedSearch');

dojo.require('dojo.data.ItemFileReadStore');

dojo.declare(
    'zlib.data.ReadStoreWithExtendedSearch',
    [dojo.data.ItemFileReadStore],
    {
        constructor: function(/* Object */ keywordParameters){
            console.log('ReadStoreWithExtendedSearch.constructor');

            //	summary: constructor
            //	keywordParameters: {url: String}
            //	keywordParameters: {data: jsonObject}
            //	keywordParameters: {typeMap: object)
            //		The structure of the typeMap object is as follows:
            //		{
            //			type0: function || object,
            //			type1: function || object,
            //			...
            //			typeN: function || object
            //		}
            //		Where if it is a function, it is assumed to be an object constructor that takes the
            //		value of _value as the initialization parameters.  If it is an object, then it is assumed
            //		to be an object of general form:
            //		{
            //			type: function, //constructor.
            //			deserialize:	function(value) //The function that parses the value and constructs the object defined by type appropriately.
            //		}

            this._arrayOfAllItems = [];
            this._arrayOfTopLevelItems = [];
            this._loadFinished = false;
            this._jsonFileUrl = keywordParameters.url;
            this._jsonData = keywordParameters.data;
            this._datatypeMap = keywordParameters.typeMap || {};
            if(!this._datatypeMap['Date']){
                //If no default mapping for dates, then set this as default.
                //We use the dojo.date.stamp here because the ISO format is the 'dojo way'
                //of generically representing dates.
                this._datatypeMap['Date'] = {
                                                type: Date,
                                                deserialize: function(value){
                                                    return dojo.date.stamp.fromISOString(value);
                                                }
                                            };
            }
            this._features = {'dojo.data.api.Read':true, 'dojo.data.api.Identity':true};
            this._itemsByIdentity = null;
            this._storeRefPropName = "_S";  // Default name for the store reference to attach to every item.
            this._itemNumPropName = "_0"; // Default Item Id for isItem to attach to every item.
            this._rootItemPropName = "_RI"; // Default Item Id for isItem to attach to every item.
            this._reverseRefMap = "_RRM"; // Default attribute for constructing a reverse reference map for use with reference integrity
            this._loadInProgress = false;	//Got to track the initial load to prevent duelling loads of the dataset.
            this._queuedFetches = [];
            if(keywordParameters.urlPreventCache !== undefined){
                this.urlPreventCache = keywordParameters.urlPreventCache?true:false;
            }
            if(keywordParameters.clearOnClose){
                this.clearOnClose = true;
            }
        },

        _getItemByIdentity: function(/* Object */ identity){
            console.log('ReadStoreWithExtendedSearch._getItemByIdentity');

            //	summary:
            //		Internal function to look an item up by its identity map.
            var item = null;
            if(this._itemsByIdentity){
                item = this._itemsByIdentity[identity];
            }else{
                item = this._arrayOfAllItems[identity];
            }
            if(item === undefined){
                item = null;
            }
            return item; // Object
        },
    }
);
  • Вопрос задан
  • 16 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
summer Ярославль
от 100 000 до 140 000 ₽
КРАФТТЕК Санкт-Петербург
от 60 000 до 80 000 ₽
19 апр. 2024, в 23:00
5000 руб./за проект
19 апр. 2024, в 20:43
20000 руб./за проект