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,
тоже не появляется). Но стоит поменять на другой тип — все ок.
Что я неправильно понимаю?
Комментарии: 6
Сам себе отвечу. Помогло долгое копание тут (оф.док.extjs)
добавил
Но почему оно сразу не отрисовало галочку, а точнее почему просто checkbox отрисовывает, textfield выводит 1, а xcheckbox не отрисовывает так и осталось для меня загадкой. (если конечно это не дело в том, что он хочет true/false, а в базу пишется 1\0), а учитывая, что больше никто не спрашивает такое — видимо я «везунчик» :-)
добавил
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), а учитывая, что больше никто не спрашивает такое — видимо я «везунчик» :-)
Забыли, все что я тут написал — это не совсем верно. Точнее этот код галочку то будет ставить, но вот 0 уже не отправит. Ошибка, оказалась, в моей бестолковости и невнимательности. Посмотрев в console.log(this.menu.record); я обнаружил, что то, что должен показывать xcheckbox (1 или 0) передается в кавычка. И тут меня осенило — в файле class.map.inc.php те поля, которые для галочки прописаны как текстовые. Как только я поменял на
'view_index' =>
array(
'dbtype' => 'tinyint',
'precision' => '1',
'phptype' => 'integer',
'null' => false,
),
все стало работать как нужно. Такие вот дела. Надеюсь, кому-то поможет.
Спасибо за наводку!
Сейчас столкнулся точно с такой же проблемой.
Ваш пример увы не помог =(
В console.log(this.menu.record) — всё равно приходит единица текстом, а не числом (даже после изменения class.map.inc.php).
В чём проблема — так и не разобрался, но разобрался как это пофиксить.
Это решает проблему.
Сейчас столкнулся точно с такой же проблемой.
Ваш пример увы не помог =(
В console.log(this.menu.record) — всё равно приходит единица текстом, а не числом (даже после изменения class.map.inc.php).
В чём проблема — так и не разобрался, но разобрался как это пофиксить.
{
xtype: 'xcheckbox',
fieldLabel: 'Чекбокс',
name: 'isuser',
submitOnValue: "1",
}
Основная строчка: submitOnValue: «1»,Это решает проблему.
Замечу, что и в самой БД эти поля должны быть tinyint(1), к слову ваше решение у меня не показывает галочки, а без него — показывает :-) Это как бы странно, но если у вас работает и вам помогло — то хорошо.
Специально создал новый xcheckbox, при даже просто типе поля int в map.class и в БД — значение 1 отправляет, но галочки нет. Tinyint в map и в самой БД — отправляет и открывает с галочкой.
Я прошу прощения, что отвечаю спустя практически 2 недели. Забыл про оповещение с форума
Специально создал новый xcheckbox, при даже просто типе поля int в map.class и в БД — значение 1 отправляет, но галочки нет. Tinyint в map и в самой БД — отправляет и открывает с галочкой.
Я прошу прощения, что отвечаю спустя практически 2 недели. Забыл про оповещение с форума
Если ответ (единица) приходит именно числом — то моё решение работать не будет =)
Оно работает только если ответ приходит текстом.
submitOnValue — взял не с потолка =) если что))
github.com/modxcms/revolution/blob/v2.8.4-pl/manager/assets/modext/util/utilities.js#L567
Оно работает только если ответ приходит текстом.
submitOnValue — взял не с потолка =) если что))
github.com/modxcms/revolution/blob/v2.8.4-pl/manager/assets/modext/util/utilities.js#L567
Понял. Значит мы оба нашли разные рабочие решения вопроса.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.