Хочу создать 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
},
}
);