2013-04-21 5 views
3

Я новичок в Sencha, и, хотя я разработал большую часть того, что мне нужно, я борюсь с одной конкретной задачей - динамически настраивать магазин URL-адрес прокси-сервера и загрузка/обслуживание хранилища, когда пользователь набирает элемент в списке.Sencha Touch - установить адрес прокси-сервера магазина динамически и загрузить хранилище в элементе списка списка.

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

Оригинальный список записей (#grList) хранится в виде навигации (Main.js).

Ext.define('Groups.view.Main', { 
extend: 'Ext.navigation.View', 
xtype: 'main', 
requires: [ 
], 
config: { 
    id: 'Main', 
    items: [ 
    { 
      xtype: 'tabpanel', 
      title: 'User Groups', 
      ui: 'light', 
      layout: { 
       animation: 'fade', 
       type: 'card' 
      }, 
      tabBar: { 
       docked: 'top', 
       layout: { 
        pack: 'center', 
        type: 'hbox' 
       } 
      }, 
      items: [ 
       { 
        xtype: 'list', 
        title: 'News', 
        id: 'rssList', 
        itemTpl: [ 
         '{title}<br/><small>{contentSnippet}' 
        ], 
        store: 'Feeds' 
       }, 
       { 
        xtype: 'list', 
        title: 'Profiles', 
        id: 'grList', 
        itemTpl: [ 
         '<img class="photo" src="{grCountryFlagURL}" align="center" width="40" height="40"/>{grHandle}<br/><small>{grCountry}</small>' 
        ], 
        store: 'Groups' 
       }, 
       { 
        xtype: 'carousel', 
        title: 'About', 
        items: [ 
         { 
          xtype: 'component', 
          html: '1' 
         }, 
         { 
          xtype: 'component', 
          html: '2' 
         } 
        ] 
       } 
      ] 
     } 


    ] 
} 

});

При нажатии на элемент записи панель сведений (GroupDetail.js) отображается в виде навигации контроллером (MainController.js).

Ext.define('Groups.controller.MainController', { 
extend: 'Ext.app.Controller', 

config: { 
    refs: { 
     main: '#Main' 
    }, 

    control: { 
     "#grList": { 
      itemtap: 'showGRDetail' 
     }, 
     "#rssList": { 
      itemtap: 'showRSSDetail' 
     } 
    } 
}, 

showGRDetail: function(dataview, index, target, record, e, eOpts) { 
    var GRdetail = Ext.create('Groups.view.GroupDetail'); 
    this.getMain().push(GRdetail); 
    GRdetail.setData(record.data); 
    GRdetail.getAt(0).setData(record.data); 
    GRdetail.getAt(1).setData(record.data); 
}, 
showRSSDetail: function(dataview, index, target, record, e, eOpts) { 
    var RSSdetail = Ext.create('Groups.view.NewsDetail'); 
    this.getMain().push(RSSdetail); 
    RSSdetail.setData(record.data); 
} 

});

Панель деталей состоит из двух вкладок. Первый - это простой контейнер, отображающий данные записи и отлично работающий. Вторая (#rssGroup) - это список, в котором я хочу отобразить канал RSS, специфичный для элемента записи, который был задействован, но это тот бит, с которым я не могу работать.

Ext.define('Groups.view.GroupDetail', { 
extend: 'Ext.tab.Panel', 

config: { 
    id: 'GroupDetail', 
    items: [ 
     { 
      xtype: 'container', 
      padding: 30, 
      title: 'Profile', 
      iconCls: 'search', 
      id: 'grProfile', 
      tpl: [ 
       '<img class="photo" src="{grCountryFlagURL}" align="center" width="80" height="50"/>{grHandle}<br/><small>{grProfile}</small>' 
      ], 
      layout: { 
       type: 'fit' 
      } 
     }, 
     { 
      xtype: 'list', 
      title: 'News', 
      id: 'rssGroup', 
      iconCls: 'info', 
      itemTpl: [ 
      '{title}<br/><small>{contentSnippet}' 
      ], 
      store: 'GroupNews' 
       } 
    ], 
    tabBar: { 
     docked: 'bottom', 
     layout: { 
      pack: 'center', 
      type: 'hbox' 
     } 
    } 
} 

});

В списке RSS используется магазин (GroupNews.js) и модель (Feed.js) и отлично работает, если я устанавливаю autoload = true в хранилище и жесткий код статическим URL-адресом прокси-сервера, но если я отключу автозагрузку и удалить url prxy, ни один из моих экспериментов при динамическом настройке, загрузке и обслуживании этого магазина не работал.

Ext.define('Groups.store.GroupNews', { 
extend: 'Ext.data.Store', 
alias: 'store.GroupNews', 

requires: [ 
    'Groups.model.Feed' 
], 

config: { 
    autoLoad: false, 
    model: 'Groups.model.Feed', 
    storeId: 'GroupNews', 
    proxy: { 
     type: 'jsonp', 
     url: '', 
     reader: { 
      type: 'json', 
      rootProperty: 'responseData.feed.entries' 
     } 
    } 
} 

});

Nb. Я не включил ни одну из моих попыток динамически установить/загрузить хранилище GroupNews в приведенных выше образцах кода, это именно то, что я до сих пор работаю.

Любая помощь была бы чрезвычайно оценена.

ответ

5

Вы пробовали это? -

var group_store = Ext.getStore("GroupNews"); 
group_store.getProxy().setUrl('new_url_here');  
group_store.load(); 

Назначайте магазин к вашему списку снова-

your_list.setStore(group_store); 

Если магазин URL прокси изменяется, и он будет загружен, то вы можете увидеть количество элементов с group_store.getCount() методом просто чтобы убедиться, что имеют правильные данные.

+0

Я пробовал несколько вещей, очень похожих на это без успеха, но это сработало в первый раз, поэтому большое спасибо за ответ, это действительно помогло мне. – Will

+0

Я полагаю, что либо часть загрузочного магазина снова с измененным прокси отсутствовала, либо назначала только что загруженное хранилище с данными для списка. Если вы хотите убедиться, что пошло не так, просто попробуйте прокомментировать одну из этих двух строк. – SachinGutte

Смежные вопросы