Местное хранилище с JSON и Hasmany - PullRequest
1 голос
/ 27 января 2012

Я работаю с Sencha Touch 1.1.0 на Chrome, и это моя история:

Я получаю ответ json от сервера и сохраняю его в локальном хранилище.

здесь мой ответ Json

stcCallback1001({"success":true,
"magazines":[
{"magazine_id":"9","numero":1,"titre":"bla bla bla bla","articles":[{"article_id":1,"titre":"bee or not to bee"},{"article_id":2,"titre":"the sky is blue"}]},
{"magazine_id":"10","numero":12,"titre":"bli bli bli","articles":[{"article_id":1,"titre":"where is brian"},{"article_id":2,"titre":"do you want a cup of tea"}]}]})

как видите, есть двумерный массив. Там несколько журналов, и в каждом журнале есть несколько статей.

Вот моя модель

new Ext.regModel('magazines',{
fields : [
{name : 'magazine_id', type :'int'},
{name : 'numero', type:'int'},
{name : 'titreLong' , type : 'string'}
],
idProperty : 'magazine_id', //ClŽ primaire de la table,
hasMany:{
model:'articles',
name:'articles'
}
});


new Ext.regModel('articles',{
fields : [
{name : 'magazine_id', type :'int'},
{name : 'article_id', type :'int'},
{name : 'titre' , type : 'string'},
{name : 'Mimage', type :'string'},
{name : 'datePublicationFormat', type : 'string'}
],
idProperty : 'article_id', //ClŽ primaire de la table
belongsTo: 'magazines'
});

вот мой магазин местных жителей

offlinestore = new Ext.data.Store({
model: 'magazines',
autoLoad: true,
getGroupString : function(record) {
return record.get('titre');
},
proxy: {
type: 'localstorage',
id:'magazines_id'
},

}
});

вот мой магазин, который делает запрос и загружает данные в локальное хранилище

var articleStoreDist = new Ext.data.Store({
model:'magazines',
proxy : {
type: 'scripttag',
url :'http://webservive_to_call',
reader : {
type:'json',
root:'magazines'
}
},
autoLoad:true,
listeners :
{
load: function(){
offlinestore.getProxy().clear();
offlinestore.data.clear();
offlinestore.sync();


articleStoreDist.each(function(record,index){
offlinestore.add(record.copy());

});
offlinestore.sync();
offlinestore.load();

}
}
});

и как я пытаюсь показать все результаты:

var tpl = new Ext.XTemplate(
'<table width="97%" border="0" cellspacing="0" cellpadding="0" style="margin:0 auto;">',
'<tpl for=".">',
'<tr class="headerNumero">',
'<td colspan="3"><div style="width:120px;float:right;"><div style="border:1px solid #CCC;background:red;width:102px;height:34px;"></div></div><h1>#{numero} <span class="discret">{titreLong} {titre}{[xindex % 3 === 0 ? "even" : "odd"]}</span></h1></td>',
'</tr>',
'<tr class="rubriques">',
//'<tpl for="articles">',
// '<td><div class="commentaires"><span>1</span><h3>DŽcouverte</h3></div></td>',
//'<tpl>',
'</tr>',
'</tpl>',
'</table>'


&nbsp;

home = new Ext.Panel({
//style:'background:#EFEEE7',
fullscreen:true,
layout:'fit',
items: [{
xtype: 'dataview',
autoHeight:true,
multiSelect: true,
store: offlinestore,
tpl:tpl,
itemSelector:'div.tpl'
}]
});

Результат:

Я получаю все название журнала, но в localStorage нет записи статьи. Мне бы хотелось : Как хранить данные «статьи» в локальном хранилище? Как получить "статью" данных из локального хранилища?

привет

Немного (или нет) дополнительной информации, я получил это сообщение в консоли:

sencha-touch-debug.js:13028
Uncaught TypeError: Cannot read property 'parentNode' of undefined
...