Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ExtJs - не получается передать данные в ComboBox, ExtJs - не получается передать данные 
:(
    Опции темы
DmiSbr
Дата 15.11.2011, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.4.2010

Репутация: нет
Всего: нет



Доброго всем дня !
Подскажите начинающему в Web-разработке

Использую связку: на серверной стороне - CodeIgniter, клиентская часть - ExtJS
Из базы данных на Firebird выбираются данные из таблицы "Перечень валют"

my_model.php
Код

...
function get_currency() {
    $query = $this-> db-> query('select CUR_ID, CUR_NAME from CURRENCY order by CUR_ID');
    return $query;
}
...

my_controller.php
Код

...
function get_data() {
    $query = $this-> my_model-> get_currency();
    while ($obj = $query-> _fetch_object()) {
        $arr[] = $obj;
    }
    echo '{"currency":' . json_encode($arr) . '}'; 
}
...

my_view.php
Код

...
<script type="text/javascript">
     Ext.onReady(function(){
         Ext.QuickTips.init();
    
         var store = new Ext.data.JsonStore({
    root: 'currency',
         fields: ['CUR_ID', 'CUR_NAME'],
         proxy: new Ext.data.ScriptTagProxy ({
            url: '/index.php/my_controller/get_data',
            method: 'POST'
         })
    });


         store.load();
                
         var currency = new Ext.form.ComboBox({
    name: 'currency',
    triggerAction: 'all',
    displayField: 'CUR_NAME',
    valueField: 'CUR_ID',
    bodyStyle: 'padding: 10px',
    store: store
        });
    
        var p = new Ext.Panel({
    title: 'Test',
    renderTo: 'form',
    width: 910,
    autoHeight: true,
    bodyStyle: 'padding: 10px',
    items   : [{
        xtype: 'displayfield',
        value: 'Наименование валюты'
    }, 
    currency
        ]});

});
</script>
...

ComboBox не заполняется данными
Если вывести в контроллере данные
Код

...     
$data['combo_data'] = $this-> get_data();
     $this-> load-> view('fb_view', $data);
...

А во вью сделать вывод <?print_r($combo_data);?>
массив выводиться:
{"currency":[{"CUR_ID":1,"CUR_NAME":"\u0414\u043e\u043b\u043b\u0430\u0440 \u0421\u0428\u0410"},{"CUR_ID":2,"CUR_NAME":"\u0415\u0432\u0440\u043e"},{"CUR_ID":3,"CUR_NAME":"\u0420\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u0438\u0439 \u0440\u0443\u0431\u043b\u044c"},{"CUR_ID":4,"CUR_NAME":"\u0410\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0439 \u0444\u0443\u043d\u0442 \u0441\u0442\u0435\u0440\u043b\u0438\u043d\u0433\u043e\u0432"},{"CUR_ID":5,"CUR_NAME":"\u041a\u0430\u043d\u0430\u0434\u0441\u043a\u0438\u0439 \u0434\u043e\u043b\u043b\u0430\u0440"},{"CUR_ID":6,"CUR_NAME":"\u0423\u043a\u0440\u0430\u0438\u043d\u0441\u043a\u0430\u044f \u0433\u0440\u0438\u0432\u043d\u0430"},{"CUR_ID":7,"CUR_NAME":"\u041d\u0435\u043c\u0435\u0446\u043a\u0430\u044f \u043c\u0430\u0440\u043a\u0430"}]} 

Подскажите в чем ошибка, бьюсь неделю. Опробовал несколько вариантов, результат тот же.

PM MAIL   Вверх
ashain
Дата 15.11.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 3.7.2011

Репутация: нет
Всего: 1



Может попробовать сначало сделать статическую страницу, и загрузить в комбобокс данные. Если всё ок, то искать зарытую собаку во view.
PM MAIL   Вверх
DmiSbr
Дата 15.11.2011, 18:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.4.2010

Репутация: нет
Всего: нет



2 ashain
Статическую страницу я делал. CodeIgniter замечательно передает данные в ComboBox
my_controller.php
Код

...
public function get_currency_list() {
    $s = '';
    $query = $this-> my_model-> get_currency();
    foreach($query-> result() as $row) {
        $s .= '<option value="'.$row->CUR_ID.'" >'.$row-> CUR_NAME.'</option>';
    }
    return $s;
}
...
public function index() {
    $data['currency_list'] = $this-> get_currency_list();
    $this-> load-> view('my_view', $data);
}
...

my_view.php
Код

...
    <div>Наименование валюты<strong>*</strong></div>
    <select id="currency" <?echo $currency_list;?></select>
...

Мне интересно было разобраться с ExtJS. Мой код практически полностью повторяет пример из книги "ExtJS in Action", но почему-то не хочет работать. При использовании локального Store тоже все замечательно работает   smile 
PM MAIL   Вверх
-=Ustas=-
Дата 15.11.2011, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



DmiSbr, firebug что показывает?


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
DmiSbr
Дата 16.11.2011, 05:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.4.2010

Репутация: нет
Всего: нет



2 -=Ustas=-
В том то и проблема, что firebug молчит, как будто все прекрасно
PM MAIL   Вверх
-=Ustas=-
Дата 16.11.2011, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: нет
Всего: 69



DmiSbr, на такой случай есть console.log пошагово. Проставьте везде по коду и смотрите что и где происходит, если нет возможности альтернативной отладки (например с помощью aptana).


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
DmiSbr
Дата 17.11.2011, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 28
Регистрация: 14.4.2010

Репутация: нет
Всего: нет



Заработал такой вариант
my_controller.php
Код

...
$query = $this-> my_model-> get_currency();
$i=0;
while ($obj = $query-> _fetch_object()) {
     $arr[] = $obj;
     $i++;
}
echo '{"total" : '.$i.', "currency" : ' . json_encode($arr) . '}';
...

my_view.php
Код

...
var store = new Ext.data.Store({
    proxy: new Ext.data.HttpProxy({
        metod: 'GET',
        url : '/index.php/fb/get_combo'
    }),
    reader: new Ext.data.JsonReader({
        root: 'currency',
        totalProperty: 'total',
        fields: ['CUR_ID','CUR_NAME']
    }),
    autoLoad: true
});
        
var currency = new Ext.form.ComboBox({
    typeAhead: true,
    name: 'currency',
    triggerAction: 'all',
    displayField: 'CUR_NAME',
    valueField: 'CUR_ID',
    store: store
});
...

теперь ComboBox заполняется, но.... Вверху страницы печатается массив store
если в контроллере заменить строку возврата echo ... на return ... ComboBox становиться пустым
Что же опять не так ? Во всех примерах возврат происходит именно через echo... Как избавиться от массива вверху страницы ? Или переделать возврат данных на страницу ?

2 -=Ustas=-
console.log не спасает. Пытался после создания и загрузки массива выводить 
Код

    console.log(store.getTotalCount());
    console.log(store.getAt(1).get('CUR_NAME'));
 дынные выводятся только в случае локальной загрузки JsonStore

Добавлено через 12 минут и 3 секунды
Прошу прощения.... забыл убрать передачу из контроллера store при загрузке вьюшки
Сейчас все замечательно

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Применение библиотек | Следующая тема »


 




[ Время генерации скрипта: 0.0982 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.