Как вы повторно используете сохраненные данные в localalstorage в Sencha Touch? - PullRequest
2 голосов
/ 26 апреля 2011

Я очень новичок в Сенча Touch.Мне очень нравится этот продукт, но у меня возникают проблемы с этим.Пожалуйста помоги.Я занимаюсь этим уже 3 дня !!!

Мне удалось сохранить данные в локальном хранилище для повторного использования.Но я не могу повторно использовать данные из хранилища на любых других панелях (или страницах) и параметры в 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 Ответ

1 голос
/ 03 мая 2011

Как вы видите данные? Вы используете консоль отладки в чем-то вроде 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 () в модели, чтобы убедиться, что данные сохраняются.

...