xcheckbox не ставит галочку при редактировании.

Добрый день, стыдно спрашивать, но гугление выводит только modx.pro/help/20155 и оно мне выдает ошибку. В чем мой вопрос. Я пишу в админке панель и практически все работает, кроме…
есть у меня такой итемс при добавлении записи:
//////////           
            xtype: 'xcheckbox',
              id: 'view_index',
                name: 'view_index',
/////////////
и он работает хорошо, в базу заносится цифра 1, если отметить, ну и соответственно 0, если не отметить. В панели тоже все верно работает. Но, когда я нажимаю редактирование — галочка не поставлена. Я меняю типа поля на xtype: 'texfield' — будет показано значение 1, значит считал все верно. Я менял на тип просто checkbox — галочка стоит, работает. Ставлю вновь xtype: 'xcheckbox' — галочки нет. Я психанул, добавил все, что можно:
xtype: 'xcheckbox',
                                            id: 'view_index',
                                            name: 'view_index',
                                            inputValue: '1',
                                            checked: true,
Галочка, не появляется, даже при принудительном checked: true. (по решению доступному по ссылке вначале статьи
checked:  this.record ? this.record.object['view_index'] : false,
тоже не появляется).
Но стоит поменять на другой тип — все ок.
Что я неправильно понимаю?
Станислав
02 апреля 2021, 03:50
modx.pro
2
764
0

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

Станислав
03 апреля 2021, 00:52
+1
Сам себе отвечу. Помогло долгое копание тут (оф.док.extjs)
добавил
xtype: 'xcheckbox',
id: 'active',
name: 'active',
        setValue : function(v){
        var checked = this.checked,
            inputVal = this.inputValue;
            
        if (v === false) {
            this.checked = false;
        } else {
            this.checked = (v === true || v === 'true' || v == '1' || (inputVal ? v == inputVal : String(v).toLowerCase() == 'on'));
        }
        
        if(this.rendered){
            this.el.dom.checked = this.checked;
            this.el.dom.defaultChecked = this.checked;
        }
        if(checked != this.checked){
            this.fireEvent('check', this, this.checked);
            if(this.handler){
                this.handler.call(this.scope || this, this, this.checked);
            }
        }
        return this;
    }
И все заработало. Кстати, покопался в другом компоненте, где все работает, там похожее прописано в /processors/update.class.php
$this->setProperty('show_in_index', $this->getProperty('show_in_index') == 'true' || $this->getProperty('show_in_index') == '1'? 1 : 0);
        $this->setProperty('allow_comment', $this->getProperty('allow_comment') == 'true' || $this->getProperty('allow_comment') == '1'? 1 : 0);
Видимо это влияет на правильную работу.

Но почему оно сразу не отрисовало галочку, а точнее почему просто checkbox отрисовывает, textfield выводит 1, а xcheckbox не отрисовывает так и осталось для меня загадкой. (если конечно это не дело в том, что он хочет true/false, а в базу пишется 1\0), а учитывая, что больше никто не спрашивает такое — видимо я «везунчик» :-)
    Станислав
    16 апреля 2021, 03:45
    0
    Забыли, все что я тут написал — это не совсем верно. Точнее этот код галочку то будет ставить, но вот 0 уже не отправит. Ошибка, оказалась, в моей бестолковости и невнимательности. Посмотрев в console.log(this.menu.record); я обнаружил, что то, что должен показывать xcheckbox (1 или 0) передается в кавычка. И тут меня осенило — в файле class.map.inc.php те поля, которые для галочки прописаны как текстовые. Как только я поменял на
    'view_index' =>
                    array(
                        'dbtype' => 'tinyint',
                        'precision' => '1',
                        'phptype' => 'integer',
                        'null' => false,
                    ),
    все стало работать как нужно. Такие вот дела. Надеюсь, кому-то поможет.
      Дмитрий Танцирев
      23 июня 2022, 13:48
      0
      Спасибо за наводку!
      Сейчас столкнулся точно с такой же проблемой.
      Ваш пример увы не помог =(
      В console.log(this.menu.record) — всё равно приходит единица текстом, а не числом (даже после изменения class.map.inc.php).

      В чём проблема — так и не разобрался, но разобрался как это пофиксить.

      {
          xtype: 'xcheckbox',
          fieldLabel: 'Чекбокс',
          name: 'isuser',
          submitOnValue: "1",
      }
      Основная строчка: submitOnValue: «1»,
      Это решает проблему.
        Станислав
        05 июля 2022, 15:34
        0
        Замечу, что и в самой БД эти поля должны быть tinyint(1), к слову ваше решение у меня не показывает галочки, а без него — показывает :-) Это как бы странно, но если у вас работает и вам помогло — то хорошо.
        Специально создал новый xcheckbox, при даже просто типе поля int в map.class и в БД — значение 1 отправляет, но галочки нет. Tinyint в map и в самой БД — отправляет и открывает с галочкой.
        Я прошу прощения, что отвечаю спустя практически 2 недели. Забыл про оповещение с форума
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
6