Источник данных не отображается для dijit select при установке в хранилище данных json

#json #dojo

#json #dojo

Вопрос:

Я пытаюсь установить для своего источника данных dijit Select хранилище данных в формате json, но в моем раскрывающемся списке отображаются только поля, а не текст из хранилища данных. Хранилище данных извлекается из базы данных и имеет формат:

 {
    "GetReachesResult":[
        {
            "reach":"CRC"
        },
        {
            "reach":"IV"
        },
        {
            "reach":"IVA"
        },
        {
            "reach":"IVB"
        },
        {
            "reach":"IVD"
        },
        {
            "reach":"IVE"
        },
        {
            "reach":"V"
        }
    ]
}
 

модуль кода, который пытается установить хранилище для выпадающего списка,:

 define(['dojo/store/Memory', 'dojo/_base/xhr', "dojo/data/ObjectStore"],
//functions to get data and fill data stores
function (Memory, xhr, ObjectStore) {
    return {
        GetReaches: function (url) {
            xhr.get({//get data from database
                url: url,
                //url: url,
                handleAs: "json",
                load: function (result) {
                    var ReachData = result.GetReachesResu< //GetReachesResult is default reach of GetReaches Method
                    var ReachStore = new Memory({ data: ReachData });
                    var oReachStore = new ObjectStore({ objectStore: ReachStore });
                    DD.setStore(oReachStore);
                },
                error: function (err) { }

            });
        } //GetReaches
    }
});
 

Вызов модуля с главной страницы:

 ....
        DD = new Select({
            style: { width: '250px' }
        }, "DropDownDiv");
        DD.startup();
        var myButton = new Button({
            label: "Get Data",
            onClick: function () {
                Data.GetReaches(dataServiceUrl);
            }
        }, "ButtonDiv");

});
 

Есть идеи? Спасибо

Ответ №1:

Я заметил, что вы исправили свою ошибку, изменив reach свойство на label . Однако вы можете настроить свойство, используемое для метки, используя labelAttr свойство, например:

 DD = new Select({
    style: { width: '250px' },
    labelAttr: 'reach'
}, "DropDownDiv");
 

Это также должно работать нормально, как вы можете видеть в этом JSFiddle: http://jsfiddle.net/5JKx6 /

Лучший способ изучить эти свойства — взглянуть на документацию API.

Ответ №2:

Проблема заключалась в моих данных json — для выбора для отображения данных мне нужно было изменить имя атрибута объекта с «reach» на «label». Я предполагаю, что Select отображает только атрибуты с меткой name