Событие SelectField Sencha Touch 2.1 и использование в нем Store и Model. (в Sencha Architect 2)

Я начинаю узнавать о Sencha Touch 2. Итак, у меня было много вопросов! ^^ Давайте исследуем это. Теперь у меня есть данные json, например:

{ результат: "УСПЕХ", национальный: [ "Афганистан", "Албания", "Албания", "Алжир", "Американское Самоа", "Андорра" ] }

Затем я загружу его из файла url:nation.php. Как я могу загрузить его в My Select Field.??????

Поделитесь и поддержите меня.! Спасибо :).


person Chu Bao .Dev    schedule 10.06.2013    source источник


Ответы (2)


Я не знаю, как это сделать в Sencha Architect 2 (я его не использую).. но все же

Вместо того, чтобы задавать вопрос без попытки (я имею в виду, что вы не размещали здесь проверенный код), лучше начать с документации Sencha Touch.

В любом случае, вы можете сделать это следующим образом

Модель

Ext.define('AppName.model.countries', {
    extend : 'Ext.data.Model',

    config: {
        fields: [
               {name: 'name', convert: function(value, record) {
                                return record.raw;
               }}
            ],
    }
});

Магазин

var myStore = Ext.create("Ext.data.ArrayStore", {
  model : 'AppName.model.countries',
  proxy: {
    type: "ajax",
    url : "nation.php",
    reader: {
        type: 'json',
        rootProperty : function(data) {
            return data.national;
        }
    }        
    },
    autoLoad: true
 });

Выбрать поле в представлении

 Ext.create('Ext.form.Panel', {
    fullscreen: true,
    items: [{
       xtype: 'selectfield',
       store: myStore ,
       valueField:'name',
       displayField:'name'
    }]
});
person Viswa    schedule 11.06.2013
comment
Спасибо за ваш ответ! Я буду следить за этим постом, чтобы использовать его для Sencha Architect (SA). Потому что S.A. помогает мне лучше изучить Sench Touch. ^^ Я новичок в этом фреймворке. Я постараюсь перевести документ. - person Chu Bao .Dev; 14.06.2013
comment
@ChuBao.Dev Добро пожаловать, и если ответ поможет вам ... примите его. - person Viswa; 14.06.2013
comment
Хорошо, но я использую Sencha Architect, так что у него есть некоторые отличия: rootProperty : function(data) { return data.national; } - person Chu Bao .Dev; 14.06.2013
comment
Нет, Вишва! Просто rootProperty — свойство конфигурации SA. Это просто значение (строка, а не функция). И мой магазин успешно загружается без использования 'rootProperty'. :) Так много проблем ^^. - person Chu Bao .Dev; 14.06.2013
comment
Просто укажите значение rootProperty как национальное и посмотрите, я думаю, что это также сработает.. напечатайте длину данных, которую вы храните.. используя console.log(store.getData().length); - person Viswa; 14.06.2013
comment
Viswa! Я использовал rootProperty как «национальный». Но SA показывает сообщение Невозможно загрузить данные. Нажмите, чтобы просмотреть ошибку. Так как? ^^ - person Chu Bao .Dev; 17.06.2013
comment
@Chu Bao .Dev, я использовал rootProperty как «национальный», и он работает ... вы используете код, который я разместил, иначе вы можете обновить свой вопрос, указав свою модель и сохранить код ... чтобы я мог четко понять проблему. - person Viswa; 17.06.2013
comment
Можете ли вы использовать Sencha Architect?Viswa. Этот API: api.vietnamvisaform.com/visa_api.php/national я не прочитайте его при использовании rootProperty. - person Chu Bao .Dev; 17.06.2013
comment
вам не разрешено из-за ошибки Access-Control-Allow-Origin? - person Viswa; 17.06.2013
comment
вы сказали Невозможно загрузить данные. Нажмите, чтобы просмотреть ошибку. сообщение показывает.. если это. щелкните по нему и скажите, что это за сообщение об ошибке? - person Viswa; 17.06.2013
comment
Правильно, я думаю, что не знаю о Access-Controll-Allow-Origin в Sencha Touch (в SA). Как это исправить? Потому что я использую непосредственно Ext.ajax.request. Показал этот. - person Chu Bao .Dev; 17.06.2013
comment
Это моя проблема опубликована, но я не могу ее исправить. stackoverflow.com/questions/17100666/ - person Chu Bao .Dev; 17.06.2013
comment
наконец, мы нашли проблему.. ваш отвечающий сервер должен разрешить междоменное взаимодействие, иначе вы не сможете это исправить.. если вы можете изменить код сервера, вы можете это сделать.. но я думаю, что в вашем случае вы не можете этого сделать. это.. я прав? - person Viswa; 17.06.2013
comment
Ps: Store Sencha Architect показывает сообщение, ^^, но есть место для нажатия. Вы можете скачать пробную версию Sencha Architect, чтобы протестировать ее, как я. - person Chu Bao .Dev; 17.06.2013
comment
Моя пробная версия закончилась без создания приложения.. Мне очень удобно без Sencha Architect, поэтому я не заинтересовался SA. - person Viswa; 17.06.2013
comment
Извиняюсь! Мой английский неправильный. :) Store Sencha Architect показывает сообщение, ^^, но имеет место для щелчка, что означает при использовании SA, это модель MVC. И я перезагружаю использовать этот магазин, он показывает сообщение. Но не знаю, где я могу увидеть эту ошибку. Вот и все!!! ^^ И спасибо за все, что вы поделились. Я собираюсь использовать Sencha Touch, как и вы. :) Это мой скайп: zhouask1011. - person Chu Bao .Dev; 17.06.2013
comment
! Я начал программировать на Sencha Touch 2.1. Я использовал весь ваш исходный код. Но он по-прежнему показывает сообщение об ошибке Access-Controll-Allow-Origin. Можете ли вы перепроверить меня с помощью этого API?: api.vietnamvisaform.com/visa_api.php/national< /а>. - person Chu Bao .Dev; 18.06.2013
comment
Это не проблема кода сенчи. Эта проблема возникает только в браузере компьютера из-за сервера. какую ОС вы используете? - person Viswa; 18.06.2013
comment
если вы создали этот API (api.vietnamvisaform.com/visa_api.php/national), вы можете изменить код API сервера для поддержки Access-Control-Allow-Origin. - person Viswa; 18.06.2013

При поддержке Viswa. :) Я нашел эту проблему - XMLHttpRequest не может загрузиться. Origin не разрешен из-за ошибки Access-Control-Allow-Origin (безопасность политики браузера). И в документе Sencha Touch говорится: «Прокси-сервер JsonP полезен, когда вам нужно загрузить данные из домена, отличного от того, на котором работает ваше приложение. Если ваше приложение работает на http://domainA.com он не может использовать Ajax для загрузки своих данных с http://domainB.com, так как междоменные запросы ajax запрещены браузером.

" Кроме того, все, что нам нужно сделать, это - "Реализовать все API на вашем веб-сервере" и следовать коду формата JsonP: (в PHP)

$callback = $_REQUEST['callback'];// check callbackkey

// Create the output object.
$output = array('a' => 'Apple', 'b' => 'Banana');// output data.

//start output
if ($callback) {
    header('Content-Type: text/javascript');
    echo $callback . '(' . json_encode($output) . ');';
} else {
    header('Content-Type: application/x-json');
    echo json_encode($output);
}

Если. Используя Sencha Touch 2.1, Вы можете использовать:

Ext.data.JsonP.request({
        url: 'http://otherdomain/svn_visaapi/trunk/api/visa_api.php/test_json',
        callbackKey: 'callback',
        success: function(result) {
            console.log(result);
            //Your success function here...
        }
    });

- Если с помощью Sencha Architect вы можете использовать Store.proxy.JsonP для вызова API. - Прочитайте больше документ Sencha Touch 2.1, чтобы увидеть это.

person Chu Bao .Dev    schedule 18.06.2013