Начало работы с extJS

Я не понимаю, что я делаю неправильно.

Я пытаюсь заполнить форму из строки JSON с сервера, и это не работает. Я вообще ничего не получаю обратно. Я изучаю объект, и он не определен. Я уже третий день бьюсь головой о стену. Мне нужен простой пример, который работает, и я буду строить его оттуда.

Вот простой пример, который я пытался использовать:

var messages = new Ext.data.JsonStore({
    url: '/user/' + user_id,
    method: 'GET',
    root: 'user',
    fields: [
             {name: 'user_id'},
             {name: 'first_name'}
     ],
     listeners: {
        load: messagesLoaded
    }
});

messages.load();

function messagesLoaded(messages) {
    console.log(messages);
}

Вот моя строка JSON:

{"success":"true","user":{"user_id":"2","first_name":"Test","last_name":"Test","email":null,"password":null,"city_id":"6379","birth_date":"2009-06-09","gender":"F","created_on":"2009-06-01 17:21:07","updated_on":"2009-06-14 17:20:14","active":"Y","cuisine_id":null}}

Я действительно не понимаю, что я делаю неправильно, но моя строка JSON не загружается. Спасибо!


person jeffkolez    schedule 03.07.2009    source источник
comment
Что говорят Fiddler или Firefox, когда вы смотрите на XMLHttpRequest?   -  person epascarello    schedule 03.07.2009


Ответы (2)


Итак, вы почти у цели, но есть одна проблема. root (в данном случае "пользователь") должен быть массивом. Даже если это массив только с 1 объектом. Ext.data.JsonReader (программа чтения по умолчанию для Ext.data.JsonStore) принимает только массив результатов.

Таким образом, ваш javascript выглядит просто отлично, но объект JSON, возвращаемый сервером, должен выглядеть примерно так.

{
    "success":"true",
    "user": [{
        "user_id":"2",
        "first_name":"Test",
        "last_name":"Test",
        "email":null,
        "password":null,
        "city_id":"6379",
        "birth_date":"2009-06-09",
        "gender":"F",
        "created_on":"2009-06-01 17:21:07",
        "updated_on":"2009-06-14 17:20:14",
        "active":"Y",
        "cuisine_id":null
    }]
}
person scott    schedule 03.07.2009
comment
Спасибо - это была моя проблема. Я изменил пользовательский тег на данные и удалил корень из своего кода, и это сработало. Медленно, но верно я разбираюсь в этом. - person jeffkolez; 03.07.2009

Еще одна вещь, consoloe.logging вашего объекта хранилища будет создавать что-то вроде [Object] в Firebug... не слишком полезно. Вы должны либо использовать console.dir, либо вместо этого регистрировать свои фактические данные.

Один комментарий о загрузке вашей формы после того, как вы загрузили свой JSON (хотя этот пример этого не показывает). Убедитесь, что ваша форма действительно отображается, прежде чем пытаться загрузить ее данными, например. если вы пытаетесь использовать что-то вроде form.loadRecord. В противном случае вы получите пустую форму и никаких ошибок.

person Brian Moeskau    schedule 03.07.2009
comment
...что-то новое каждый день. Я с радостью использую console.log столько, сколько мне позволяет Firebug... даже не знал, что console.dir там есть... великолепно. Спасибо! - person OhkaBaka; 18.08.2009