#json #extjs
#json #extjs
Вопрос:
Первый раз, долгое время… Я использую Ext JS 4.2.2.1144, у меня есть сетка, и мой запрос с сервера (php) возвращает метаданные в форме json, которые были ранее сгенерированы, когда пользователь решает изменить конфигурацию и размер столбцов, а затем сохранить эту информацию. Все поля, такие как width, dataIndex, align и все остальные, прекрасно перенастраивают сетку при использовании функции metaChanged. Проблема, с которой я сталкиваюсь, заключается в том, что одному из столбцов необходимо отправить информацию для tpl, которая на самом деле является местоположением отображаемого изображения. Мой Json выглядит следующим образом
{
"totalCount":"2",
"root":"items",
"metaData":
{
"fields":[
{"name":"queryid"},
{"name":"createUser"},
{"name":"subject"},
{"name":"priorityImage"}
],
"columns":[
{
"dataIndex":"queryid",
"width":100,
"text":"Queryid"
},
{
"dataIndex":"createUser",
"width":100,
"text":"Owner",
"align":"center"
},
{
"dataIndex":"subject",
"width":200,
"text":"Subject",
"hidden":true
},
{
"dataIndex":"priorityImage",
"width":70,"text":"Priority",
"hidden":true,
"align":"center",
"xtype":"templatecolumn",
"tpl":['<img src="_images/{priorityImage}" height="20px" width="20px" />']
}
]
},
"items":[
{
"queryid":"1",
"createUser":"1",
"subject":"Here is a new project",
"priorityImage":"orange.png"
},
{
"queryid":"1",
"createUser":"1",
"subject":"SAL Form 4",
"priorityImage":"roundlightPurple.png"
}
]
}
Я пробовал всевозможные способы отправки tpl для этого последнего столбца, но ни один из них не увенчался успехом. У кого-нибудь есть какие-либо подсказки о том, как это сделать? В результате получается текст, а не собственно изображение. Если я загружаю сетку непосредственно из хранилища, используя модель по умолчанию, я получаю изображение из tpl, но только не при выполнении этого через метаданные. Я пробовал одинарные кавычки, двойные кавычки, без фигурных скобок, с фигурными скобками, лол. У меня закончились идеи, чтобы попробовать. Надеюсь, я выражаюсь достаточно ясно. В любом случае, заранее спасибо за любую помощь, это действительно сводит меня с ума,
спасибо,
C5
Ответ №1:
Я делал что-то подобное давным-давно, когда мне нужно было отправлять средства визуализации (функции), но они всегда отображаются в виде текста. На тот момент я не нашел другого способа, кроме как отсканировать полученные метаданные, чтобы узнать, есть ли средство визуализации, и вызвать eval
полученный текст для получения функции.
Хотя это и не ответ «сделай это», я надеюсь, что это поможет.
Ответ №2:
Я решил обойти это, хотя, возможно, это не самое идеальное решение, но оно работает. При отправке tpl на сервер он фактически переводится из <img src="_images/{priorityImage}" height="20px" width="20px" />
в amp;#60;img src=amp;#34;_images/{priorityImage}amp;#34; height=amp;#34;20amp;#34; width=amp;#34;20amp;#34;
/>
Итак, вот мое исправление на данный момент в любом случае: прежде чем я вызову код для загрузки хранилища
Ext.getCmp('lblCurrentMetaGrid').setText('projectsGridGrid');
store.on('metachange', metaChanged, this);
Тогда в функции metaChanged это выглядит следующим образом:
function metaChanged(store,meta){
var gridname = Ext.getCmp('lblCurrentMetaGrid').text;
var grid = Ext.getCmp(gridname);
for(var c = 0; c < meta.columns.length; c ){
var column = meta.columns[c];
var tpl = column.tpl;
if ( tpl !== undefined){
meta.columns[c].tpl[0] = meta.columns[c].tpl[0].replace('amp;#60;','<');
meta.columns[c].tpl[0] = meta.columns[c].tpl[0].replace('amp;#62;','>');
meta.columns[c].tpl[0] = meta.columns[c].tpl[0].replace(/amp;#34;/g,'"');
}
}
//lets look at all the metadata
grid.reconfigure(store,meta.columns);
}
Теперь я получаю свое изображение в сетке.