#local-storage #sencha-touch
#локальное хранилище #sencha-touch
Вопрос:
Я очень новичок в Sencha Touch. Мне действительно нравится продукт, но у меня возникли проблемы с решением этой проблемы. Пожалуйста, помогите. Я занимаюсь этим 3 дня!!!
Я смог сохранить данные в localstorage для повторного использования. Но я не могу повторно использовать данные из хранилища ни в каких других панелях (или страницах) и параметрах в URL. Я могу использовать данные типа app.UserStore.getAt(0).get(‘id’), вызывая их в обработчике событий, но не в параметре url или значении, которое я присваиваю.
Это просто невозможно использовать формат app.UserStore.getAt(0).get (‘id’) где-либо еще? Если да, то какие у меня есть варианты решения этой проблемы?
— сохраненные данные в localstorage после входа в систему
Ext.regModel('User', {
fields: ['id', 'email'],
proxy: { type: 'localstorage', id: 'user-localstorage' }
});
app.UserStore = new Ext.data.Store({
model: 'User',
storeId: 'ConfigStore',
autoLoad: true
});
— источник для повторного использования данных в localstorage (пожалуйста, проверьте app.UserStore.getAt(0).get(‘id’) в источнике)
- Я могу видеть сохраненные данные*
** Я получаю сообщение об ошибке из-за этого кода. (страница не отображается) **
initComponent: function(){
var toolbarBase = {
xtype: 'toolbar',
title: 'Group Chat'
};
toolbarBase.items = [{ xtype: 'spacer', flex: 1 }, {
iconCls: 'action',
iconMask: true,
scope: this,
ui: 'plain',
handler: function(){
Ext.Msg.alert('Login Sucess', *app.UserStore.getAt(0).get('id')*, Ext.emptyFn);
}
}];
this.dockedItems = toolbarBase;
var searchModel = Ext.ModelMgr.getModel("Search");
var search = new searchModel({
query: **app.UserStore.getAt(0).get('id')**
});
var store = search.tweets();
var tweetList = {
cls: 'timeline',
emptyText : '<p class="no-searches">No Message Found</p>',
disableSelection: true,
store: store,
plugins: [ {
ptype: 'pullrefresh'
}],
itemCls: 'tweet',
itemTpl: new Ext.XTemplate(
'<div class="avatar"<tpl if="profile_image_url"> style="background-image: url({profile_image_url})"</tpl>></div>',
'<div class="x-tweetanchor"></div>',
'<div class="tweet-bubble">',
'<div class="tweet-content">',
'<h2>{from_user}</h2>',
'<p>{text:this.linkify}</p><strong></strong>',
'<span class="posted">{created_at}</span>',
'</div>',
'</div>',
{
linkify: function(value) {
return value.replace(/(http://[^s]*)/g, "<a target="_blank" href="$1">$1</a>");
}
}
)
};
this.list = new Ext.List(Ext.apply(tweetList, {
fullscreen: true
}));
this.listpanel = new Ext.Panel({
layout: 'fit',
items: this.list,
dockedItems: [{
xtype: 'toolbar',
dock: 'top',
ui: 'gray',
items: [{
xtype: 'textfield',
placeHolder: 'Share your thoughts with your Peers',
name: 'searchfield'
}]
}]
});
this.items = this.listpanel;
this.list.store.load();
app.views.ChatList.superclass.initComponent.call(this);
}
Комментарии:
1. вы получаете ошибку JavaScript?
Ответ №1:
Как вы видите данные? Используете ли вы консоль отладки в чем-то вроде Chrome? Как вы сохраняете данные?
Вероятно, у вас в хранилище есть устаревшие данные. Выполнение get('id')
над неопределенным объектом приведет к вашей ошибке JavaScript. Вы должны выполнить app.UserStore.load()
команду, прежде чем пытаться получить доступ к данным в хранилище (в данном случае, вероятно, в верхней части initComponent
). Это загрузит данные с диска и обеспечит их доступность для использования. autoload
Указанное применяется только при создании хранилища.
Что касается комментария: Если вы добавите новые данные через хранилище, вместо создания объекта, эти данные будут в этом хранилище и, следовательно, доступны без необходимости обновления.
var user = app.UserStore.add({email: 'a@b.com'});
user.save() //OR app.UserStore.sync();
Таким образом, вам не придется обновлять, но вам придется выполнить синхронизацию () в хранилище или save () в модели, чтобы убедиться, что данные сохраняются.
Комментарии:
1. Большое вам спасибо. Я изменил это на основе вашего предложения, и это работает! Еще раз спасибо за вашу помощь.
2. У меня есть еще один вопрос… Я могу повторно использовать все данные localstorage для всех других панелей. Но когда я очищаю или восстанавливаю данные localstorage, это не работает на других панелях, если я не обновлю все это целиком. Таким образом, конечный результат всегда на шаг отстает от действия. Я сделал store.sync() после внесения изменений. Мой вопрос таков… Как я могу повторно использовать сохраненные данные на одной панели, чтобы мне не приходилось обновлять каждую панель, особенно внутри card?