Почему пропадает значение в combobox?
Practice.combo.Repository = function (config) {
config = config || {};
Ext.applyIf(config, {
name: 'subject',
fieldLabel: _('practice_item_subject'),
hiddenName: 'subject',
displayField: 'name',
valueField: 'id',
anchor: '99%',
preventRender: true,
fields: ['name', 'id'],
pageSize: 100,
url: Practice.config.connector_url,
//emptyText: _('no'),
baseParams: {
action: 'mgr/settings/getlist',
combo: true,
}
});
Practice.combo.Repository.superclass.constructor.call(this, config);
};
Ext.extend(Practice.combo.Repository, MODx.combo.ComboBox);
Ext.reg('practice-combo',Practice.combo.Repository);
в items.windows.js{
xtype: 'practice-combo',
fieldLabel: _('practice_item_subject'),
anchor: '99%',
allowBlank: true
},
getlist.class.phpclass SubjectItemGetListProcessor extends modObjectGetListProcessor
{
public $objectType = 'SubjectItem';
public $classKey = 'SubjectItem';
public $defaultSortField = 'name';
public $defaultSortDirection = 'ASC';
//public $permission = 'list';
/**
* We do a special check of permissions
* because our objects is not an instances of modAccessibleObject
*
* @return boolean|string
*/
public function beforeQuery()
{
if (!$this->checkPermissions()) {
return $this->modx->lexicon('access_denied');
}
return true;
}
/**
* @param xPDOQuery $c
*
* @return xPDOQuery
*/
public function prepareQueryBeforeCount(xPDOQuery $c)
{
$query = trim($this->getProperty('query'));
if ($query) {
$c->select(array('id','name'));
$c->where(array(
'name:LIKE' => "%{$query}%",
//'OR:description:LIKE' => "%{$query}%",
));
}
return $c;
}
/**
* @param xPDOObject $object
*
* @return array
*/
public function prepareRow(xPDOObject $object)
{
$array = $object->toArray();
$array['actions'] = array();
// Edit
$array['actions'][] = array(
'cls' => '',
'icon' => 'icon icon-edit',
'title' => $this->modx->lexicon('subject_item_update'),
//'multiple' => $this->modx->lexicon('subject_items_update'),
'action' => 'updateItem',
'button' => true,
'menu' => true,
);
if (!$array['active']) {
$array['actions'][] = array(
'cls' => '',
'icon' => 'icon icon-power-off action-green',
'title' => $this->modx->lexicon('subject_item_enable'),
'multiple' => $this->modx->lexicon('subject_items_enable'),
'action' => 'enableItem',
'button' => true,
'menu' => true,
);
} else {
$array['actions'][] = array(
'cls' => '',
'icon' => 'icon icon-power-off action-gray',
'title' => $this->modx->lexicon('subject_item_disable'),
'multiple' => $this->modx->lexicon('subject_items_disable'),
'action' => 'disableItem',
'button' => true,
'menu' => true,
);
}
// Remove
$array['actions'][] = array(
'cls' => '',
'icon' => 'icon icon-trash-o action-red',
'title' => $this->modx->lexicon('subject_item_remove'),
'multiple' => $this->modx->lexicon('subject_items_remove'),
'action' => 'removeItem',
'button' => true,
'menu' => true,
);
return $array;
}
}
return 'SubjectItemGetListProcessor';
Комментарии: 6
При отображении окна (формы) редактирования идет запрос к get процессору (типа mgr/some-object/get), значение поля subject вообще приходит? Может его нет, вот и в комбобокс не подставляется ничего?
А так сравнил со своим кодом, увидел 2 отличия:
1. Вот здесь
А так сравнил со своим кодом, увидел 2 отличия:
1. Вот здесь
baseParams: {
action: 'mgr/settings/getlist',
combo: true,
}
у меня еще добавляется параметрid: config.value
2. Ну и в процессоре есть условие, чтобы лишние данные не гонять:public function prepareQueryBeforeCount(xPDOQuery $c) {
if ($this->getProperty('combo')) {
$c->select('id, name, title');
}
....
При загрузке окна в этом поле на секунду появляется id, потом пропадает
Ну а get-процессор то данные верные отдает, полные? В консоли браузера посмотрите запрос этот.
При открытии объекта на редактирование должно быть:
1. Основной запрос, в котором в числе всех данных объекта придет значение этого поля.
2. Отдельный запрос к процессору getlist, в который уйдет 2 параметра: id, combo=1, оттуда придет ответ с одной единственной строкой, из которой title и подставится.
Если в п.2 приходят много строк, то не хватает условия в процессоре, чтобы ограничить выборку:
При открытии объекта на редактирование должно быть:
1. Основной запрос, в котором в числе всех данных объекта придет значение этого поля.
2. Отдельный запрос к процессору getlist, в который уйдет 2 параметра: id, combo=1, оттуда придет ответ с одной единственной строкой, из которой title и подставится.
Если в п.2 приходят много строк, то не хватает условия в процессоре, чтобы ограничить выборку:
$id = $this->getProperty('id');
if (!empty($id)) {
$c->where(array('id' => $id));
}
Основной запрос отдает
action: mgr/item/get
id: 24 (24 — это id записи в таблице, которую редактируем)
Отдельный запрос к процессору getlist
id:
action: mgr/settings/getlist
combo: true
action: mgr/item/get
id: 24 (24 — это id записи в таблице, которую редактируем)
Отдельный запрос к процессору getlist
id:
action: mgr/settings/getlist
combo: true
modx.one/topics/modx/profit/715-combobox-with-data-from-another-table-modextra/ — если правильно понял, тут пример.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.