Почему пропадает значение в 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.php

class 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';
Ортём
30 октября 2019, 17:39
modx.pro
716
0

Комментарии: 6

Наумов Алексей
30 октября 2019, 17:59
0
При отображении окна (формы) редактирования идет запрос к get процессору (типа mgr/some-object/get), значение поля subject вообще приходит? Может его нет, вот и в комбобокс не подставляется ничего?

А так сравнил со своим кодом, увидел 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');
        }
        ....
    Ортём
    30 октября 2019, 18:06
    0
    При загрузке окна в этом поле на секунду появляется id, потом пропадает
      Наумов Алексей
      31 октября 2019, 09:17
      0
      Ну а get-процессор то данные верные отдает, полные? В консоли браузера посмотрите запрос этот.

      При открытии объекта на редактирование должно быть:
      1. Основной запрос, в котором в числе всех данных объекта придет значение этого поля.
      2. Отдельный запрос к процессору getlist, в который уйдет 2 параметра: id, combo=1, оттуда придет ответ с одной единственной строкой, из которой title и подставится.

      Если в п.2 приходят много строк, то не хватает условия в процессоре, чтобы ограничить выборку:
      $id = $this->getProperty('id');
      if (!empty($id)) {
              $c->where(array('id' => $id));
      }
        Ортём
        31 октября 2019, 10:18
        0
        Основной запрос отдает
        action: mgr/item/get
        id: 24 (24 — это id записи в таблице, которую редактируем)

        Отдельный запрос к процессору getlist
        id:
        action: mgr/settings/getlist
        combo: true
      SEQUEL.ONE
      04 ноября 2019, 21:28
      0
      modx.one/topics/modx/profit/715-combobox-with-data-from-another-table-modextra/ — если правильно понял, тут пример.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        6