seema
9 Dec 2011, 6:00 PM
Hi,
I'm facing problem while trying to use 'convert' option of Model, to read values from nested JSON.
here is my extjs code
Ext.define('filterModel', {
extend: 'Ext.data.Model',
fields:
[
{name: 'id'},
{name: 'name'},
{name: 'valueData', convert: getValueData}
],
hasMany: { model: 'values', name:'filtervalues',associationKey: 'filtervalues'},
idProperty:'id'
});
Ext.define('values', {
extend: 'Ext.data.Model',
fields: [
{name: 'displayName',type: 'string'}
],
belongsTo: 'filterModel'
});
function getValueData(v,record) {
var value = record.get('filtervalues');
var valueStr;
var len=value.length;
for(var i=0;i<len;i++){
valueStr+=value[i].get('displayName');
}
return valueStr;
}
var proxyData = new Ext.data.HttpProxy({
url: 'tree.json',
reader: {
type: 'json',
root: 'pdb.user.filterResults.partnerFilter.column'
}
});
var strData = new Ext.data.JsonStore({
model: 'filterModel',
proxy: proxyData
});
var tplData = new Ext.XTemplate(
'<tpl for=".">',
'<a href="javascript:showFilterWindow()" class="preview" title="{valueData}" id="{id}">',
'{name}</a><br/>',
'</tpl>',
'<div class="x-clear"></div>'
);
var dataV = new Ext.DataView({
autoScroll: true, store: strData, tpl: tplData,
autoHeight: false, height: 265,
multiSelect: true, itemSelector: 'div.thumb-wrap',
emptyText: 'No data to display',
loadingText: 'Please Wait...',
style: 'border:1px solid #99BBE8;background:#fff;'
});
var panel = new Ext.Panel({
title: 'List Data View', frame: true, width: 400,
height: 340, id: 'panelBottom', style: 'margin: 0 auto;',
renderTo: 'bottom', items: [dataV]
});
strData.load();
my JSON data looks like:-
{
"pdb": {
"user": {
"filterResults": {
"partnerFilter": {
"column": [
{
"id": "HomeGeography",
"name": "Home GEO",
"filtervalues": [
{
"id": "Japan",
"displayName": "Japan"
}
]
},
{
"id": "BusinessModel",
"name": "Business Model",
"filtervalues": [
{
"id": "Reseller",
"displayName": "Reseller"
}
]
}
]
}
}
}
}
}
I have to create a data view based on name field and have to concate displayName of filtervalues field. as there could be namy filter values.
Problem is while calling this convert function, its throwing me an error "value is undefined". I'm just stuck with this problem. because I'm in a very crutial development stage.
Please suggest.
I'm facing problem while trying to use 'convert' option of Model, to read values from nested JSON.
here is my extjs code
Ext.define('filterModel', {
extend: 'Ext.data.Model',
fields:
[
{name: 'id'},
{name: 'name'},
{name: 'valueData', convert: getValueData}
],
hasMany: { model: 'values', name:'filtervalues',associationKey: 'filtervalues'},
idProperty:'id'
});
Ext.define('values', {
extend: 'Ext.data.Model',
fields: [
{name: 'displayName',type: 'string'}
],
belongsTo: 'filterModel'
});
function getValueData(v,record) {
var value = record.get('filtervalues');
var valueStr;
var len=value.length;
for(var i=0;i<len;i++){
valueStr+=value[i].get('displayName');
}
return valueStr;
}
var proxyData = new Ext.data.HttpProxy({
url: 'tree.json',
reader: {
type: 'json',
root: 'pdb.user.filterResults.partnerFilter.column'
}
});
var strData = new Ext.data.JsonStore({
model: 'filterModel',
proxy: proxyData
});
var tplData = new Ext.XTemplate(
'<tpl for=".">',
'<a href="javascript:showFilterWindow()" class="preview" title="{valueData}" id="{id}">',
'{name}</a><br/>',
'</tpl>',
'<div class="x-clear"></div>'
);
var dataV = new Ext.DataView({
autoScroll: true, store: strData, tpl: tplData,
autoHeight: false, height: 265,
multiSelect: true, itemSelector: 'div.thumb-wrap',
emptyText: 'No data to display',
loadingText: 'Please Wait...',
style: 'border:1px solid #99BBE8;background:#fff;'
});
var panel = new Ext.Panel({
title: 'List Data View', frame: true, width: 400,
height: 340, id: 'panelBottom', style: 'margin: 0 auto;',
renderTo: 'bottom', items: [dataV]
});
strData.load();
my JSON data looks like:-
{
"pdb": {
"user": {
"filterResults": {
"partnerFilter": {
"column": [
{
"id": "HomeGeography",
"name": "Home GEO",
"filtervalues": [
{
"id": "Japan",
"displayName": "Japan"
}
]
},
{
"id": "BusinessModel",
"name": "Business Model",
"filtervalues": [
{
"id": "Reseller",
"displayName": "Reseller"
}
]
}
]
}
}
}
}
}
I have to create a data view based on name field and have to concate displayName of filtervalues field. as there could be namy filter values.
Problem is while calling this convert function, its throwing me an error "value is undefined". I'm just stuck with this problem. because I'm in a very crutial development stage.
Please suggest.