Как сделать пользовательский JSON Reply (производный от QueryReadStore) сопоставленный с dijit FilteringSelect? - PullRequest
0 голосов
/ 11 февраля 2011

У меня возникли проблемы с получением пользовательских форматированных данных JSON в dijit.form.FilteringSelect. Возможно, это то же самое для других типов полей выбора dijit.


Обновление: Одно из различий при использовании FilteringSelect вместо ComboBox состоит в том, что ошибки проверки Теперь это показано на элементе. Все входные данные возвращают всплывающую подсказку «неверное значение».


Вот пример JSON, который возвращается из базы данных через PHP, преобразованный из массив результатов:

{"animals":[
      {"gr_id":"1","gr_name":"Dog","gr_description":null},
      {"gr_id":"4","gr_name":"Cat","gr_description":null}]}

Вот HTML-код для отображения поля со списком и определения магазина:

<div dojoType="dojox.data.QueryReadStore" url="getAnimals.php" jsId="animalStore">
</div>
<select dojoType="dijit.form.FilteringSelect" store="animalStore" searchAttr="gr_name">
</select>

Атрибут поиска обрабатывается правильно, и ответ выше отправляется обратно клиенту, но поле остается пустым.

Я не знаю, как сопоставить пользовательский ответ JSON с меткой (значение, отображаемое в качестве параметров и используемое для поиска: gr_name) и значением (значение, возвращаемое при submit: gr_id) поля выбора dijit (FilteringSelect).

Когда я искал примеры, это всегда работало как волшебство, но я думаю, это потому, что они используют структуру по умолчанию для данных json. Я даже не могу подтвердить это, потому что документация по этим функциям немного скудна.

Ответы [ 2 ]

1 голос
/ 19 февраля 2011

Просто расширьте QueryReadStore и измените реализацию в соответствии с вашим бэкэндом. Взгляните на различные магазины в разделе dojox / data (http://trac.dojotoolkit.org/browser/tags/release-1.5.0/dojox/data) для примеров того, как это сделать.

Трудно быть более конкретным, не зная больше о вашем бэкэнде. Но если вы посмотрите на хранилище flickr или любое другое хранилище, которое сопоставляется с уже существующими источниками данных, не относящимися к додзё, вы поймете идею.

0 голосов
/ 12 февраля 2011

Я не нашел решения, которое искал, но, по крайней мере, у меня есть обходной путь. Похоже, JSON должен быть доставлен в определенном формате для обработки с помощью dijit.form.FilteringSelect (или связанных блоков)

Массив должен называться "items", а имена идентификатора и метки должны указываться вместе с ответом JSON:

{identifier: "gr_id",
      label: "gr_name",
      items: [{"gr_id":"1", "gr_name":"Cat","gr_description":null}]}

Поскольку я искал способ сделать серверный код независимым от решения представления, это не мое любимое решение ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...