使用localstorage sencha touch同步模型

时间:2013-03-05 04:38:38

标签: model sencha-touch-2 local-storage sync

我需要从我的服务器获取数据并将模型与我的本地存储同步

这是我的代码

model.js

Ext.define('bluebutton.model.BlueButton.Loyalty', {
    extend: 'Ext.data.Model',
    config: {
        idProperty: 'loyaltyModel',
        fields: [
             { name: 'fullName' },
             { name: 'age' },

             {  name: 'lastvisited'  },
             {  name: 'consumer_bbID'  },
             {  name: 'merchant_bbID'  },
             {  name: 'sessionId'  },
             {  name: 'deviceId'  },

             {  name: 'updatedPoint'  },
             { name: 'currentPoint' },

             {  name: 'action'  },
             {  name: 'result'  },
             {  name: 'loyaltyMembership_Id'}



        ],

        proxy: {
            type: 'rest',
          url: 'http://192.168.251.131:8080/WebCommon/rest/BBWebService/updateLoyaltyCardPoint',
            reader: 'json',
            actionMethods: {
                create: 'POST',
                read: 'POST',
                update: 'PUT',
                destroy: 'DELETE'
            },


                      noCache: false, // get rid of the '_dc' url parameter

//                    extraParams: {
//                    userid: "test",
//                    // add as many as you need
//                },


//            timeout:300,
//            listeners: {
//                exception: function(proxy, response, operation) {
//                     alert("Connection Problem");
//                       
//                  }
//               },

            reader: {
                type: 'json',

            },

            writer: {
                type: 'json',

            },
        }






    }

});

Store.js

    Ext.define('bluebutton.store.BlueButton.LoginLS', {
    extend: "Ext.data.Store",
    requires: ['bluebutton.model.BlueButton.Login'],
    config: {


         model :'bluebutton.model.BlueButton.Login',

         proxy: {
             type: 'localstorage',
             id: 'loginLS'
         }


    }
});

View.js

 Ext.define('bluebutton.view.Login', {
    extend: 'Ext.form.Panel',
    xtype: 'loginview',
    id: 'loginview',
    requires: [
        'bluebutton.view.Main',
        'Ext.field.Password',
        'bluebutton.store.BlueButton.LoginLS'
    ],

    config: {
        labelWidth: 80,
        frame: true,
        title: 'Please Login',

        items: [

                        {
                            xtype: 'textfield',
                            id: 'bbID',
                            label: 'User ID',

                        },
                        {
                            xtype: 'passwordfield',
                            id: 'bbPassword',
                            label: 'Password',

                        },
                        {
                            xtype: 'button',
                            text: 'Login',
                            id:'btnLogin',
//                            handler: function () {


//                            }
                        },

当我按下登录按钮时,如何将我的模型与localstorage同步?请指导我这样的解决方案

3 个答案:

答案 0 :(得分:2)

创建模型对象时设置脏标志:

  var loyalty = Ext.create('bluebutton.model.BlueButton.Loyalty', { ... });
  loyalty.setDirty(true);  // <== missing step!
  var store = Ext.getStore('blueButtonStore');
  store.add(loyalty);
  store.sync();

您还可以为商店配置设置autoSync:true和autoLoad:true,以避免必须执行store.load()和store.sync()。

答案 1 :(得分:1)

我可能误解了这个问题,但您可以向商店添加storeId属性,例如'blueButtonStore',并像这样同步:

Ext.getStore('blueButtonStore').sync();

要使用本地存储中存在的内容加载商店,您可以使用

Ext.getStore('blueButtonStore').load();

如果这不符合你的问题,请告诉我。

答案 2 :(得分:0)

您的商店是bluebutton.store.BlueButton.LoginLS

尝试致电:

Ext.getStore('LoginLS').sync();

对我有用的程序:
我的商店名称例如:MyApp.store.settings.Settings 要获得此商店,我只需致电var settings = Ext.getStore('Settings');
现在,我可以添加,删除商店中的商品,然后同步:settings.sync();

检查您的商店是否在app.js中定义。