Я новичок в 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 в приведенных выше образцах кода, это именно то, что я до сих пор работаю.
Любая помощь была бы чрезвычайно оценена.
Я пробовал несколько вещей, очень похожих на это без успеха, но это сработало в первый раз, поэтому большое спасибо за ответ, это действительно помогло мне. – Will
Я полагаю, что либо часть загрузочного магазина снова с измененным прокси отсутствовала, либо назначала только что загруженное хранилище с данными для списка. Если вы хотите убедиться, что пошло не так, просто попробуйте прокомментировать одну из этих двух строк. – SachinGutte