2013-08-16 2 views
0

Я пытаюсь сделать приложение sencha доступным в автономном режиме, но я не могу загрузить данные сервера из store.I застрял на том, как сделать его офлайн.Сделать приложение sencha доступным в автономном режиме

Ниже приведен код, который я попробовал:

Мой магазин:

Ext.define('MyApp.store.TodaysWord',{ 
extend: 'Ext.data.Store', 
config: 
{ 
autoLoad:true, 
model: 'MyApp.model.TodaysWord',  
id:'TodaysWord', 
proxy: 
{ 
    type: 'ajax', 
    url: 'url', 

    reader: 
    { 
      rootProperty:'' 
    } 
} 
} 
}); 

Моя модель:

Ext.define('MyApp.model.TodaysWord', { 
extend: 'Ext.data.Model', 

requires: ['MyApp.model.TodaysWordMenu'], 

config: { 
    fields: [ 
     {name: 'status', mapping: 'status'}, 
     {name: 'message', mapping: 'message'}, 
     {name:'data', mapping: 'data'}, 
     {name: 'definitions', mapping: 'definitions.defintion'}, 
     {name: 'ratings', mapping: 'definitions.rating'}, 
     {name:'def_id', mapping:'definitions.def_id'}, 
    ], 
} 
}); 


Ext.define('MyApp.model.TodaysWordMenu', { 
extend: 'Ext.data.Model', 
config: { 
    fields: [ 
     'name', 
     'author', 
     'word_id', 
     'category', 
     'definition', 
     'rating', 
     'def_id', 
     'example', 
     'author', 
     'is_favourite' 
    ], 

    belongsTo: "MyApp.model.TodaysWord" 
} 
}); 

Мой Вид:

{ 
xtype: 'list', 
cls: 'todayswordhome', 
itemCls:"todaysWordLists", 
store: 'TodaysWord', 
height: 140, 
layout: 'fit', 
loadingText: "Loading ...", 
emptyText: "<div class=\"notes-list-empty-text\">No notes found.</div>",  

scrollable: { 
direction: 'vertical', 
directionLock: true, 
}, 
margin: '0 0 5px 0', 
itemTpl: [   
'<div>', 
'<tpl for="data">', 
'<ul class="parabox">', 
'<li><h2><b>{name}</b></h2>', 
'<tpl for="definitions">', 
'<ul class="para-box-wrapper">', 
'<li class="{rating}"><div id = "definition" >', 
'<div class="paragraph-def"><p>{defintion}</p></div>', 
'<span class="authorBox"><i>Author: {author}</i></span>', 
'<div id="favourite" class="{is_favourite}" ></div>', 
'</div>', 
'</li>', 
'</ul>', 
'</tpl>', 
'</li>', 
'</ul>', 
'</tpl>', 
'</div>', 
] 
} 

Мой контроллер вне форума:

Ext.define('MyApp.controller.Core', { 
extend : 'Ext.app.Controller', 

config : { 
refs : { 
    homepage : '#homepage' 
} 
}, 
init : function() { 
var onlineStore = Ext.getStore('TodaysWord'), 
    localStore = Ext.create('Ext.data.Store', { 
    model: "MyApp.model.OfflineTodaysWord" 
    }), 
    me = this; 

localStore.load(); 


onlineStore.on('refresh', function (store, records) { 

    // Get rid of old records, so store can be repopulated with latest details 
    localStore.getProxy().clear(); 

    store.each(function(record) { 

    var rec = { 

     name : record.message + ' (from localStorage)' // in a real app you would not update a real field like this! 

    }; 
    console.log("Offline --->" + name); 

    localStore.add(rec); 
    localStore.sync(); 
    console.log("Offline"); 
    }); 

}); 

/* 
* If app is offline a Proxy exception will be thrown. If that happens then use 
* the fallback/local stoage store instead 
*/ 
onlineStore.getProxy().on('exception', function() { 
    this.gethomePage().setStore(localStore); //rebind the view to the local store 
    localStore.load(); // This causes the "loading" mask to disappear 
    Ext.Msg.alert('Notice', 'You are in offline mode', Ext.emptyFn); //alert the user that they are in offline mode 
}); 

} 
}); 

Я не могу сделать в автономном режиме. Я также пробовал использовать sencha в автономном режиме. Любое руководство.

Заранее благодарим за поддержку.

ответ

0

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

Ext.define('Sencha.model.ContactOffline', { 
extend: 'Ext.data.Model', 
config: { 
    fields: [ 
    {name: 'status', mapping: 'status'}, 
    {name: 'message', mapping: 'message'}, 
    {name:'data', mapping: 'data'}, 
    {name: 'definitions', mapping: 'definitions.defintion'}, 
    {name: 'ratings', mapping: 'definitions.rating'}, 
    ], 

    identifier:'uuid', 
    proxy: { 
     type: 'localstorage', 
     id : 'todaysword' 
    }, 
    hasMany: [ 
     { 
      model: 'Sencha.model.MenuOffline', 
      autoLoad: true, 
      name: 'data' 
     } 
    ] 
} 
}); 

Надеется, что это поможет кому-то.

1

Я думаю, что ниже линии очистки вашего местного магазина:

localStore.load(); // This causes the "loading" mask to disappear 

попытка его удаления

+0

Нет, это не помогло. – surhidamatya

+0

мм, вероятно, проблема в том, что вы создаете локальный магазин на лету. Вы пытались использовать localStore как отдельный файл? Кроме того, Im, предполагающий, что модель офлайнTodaysWord уже создана? почему не использовать одну и ту же модель и cp весь магазин после его загрузки –

+0

@ Нико Грюнфельд вы можете взглянуть на этот пост один раз и предложить некоторую идею http://stackoverflow.com/questions/18397623/how-to-get-value- form-record-in-sencha-touch – surhidamatya

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