Ext JS 4.2元数据tpl无法识别

时间:2014-06-30 19:27:57

标签: 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获取图像,但在通过元数据执行时却没有。我试过单引号,双引号,没有括号,带括号,哈哈。我没有想法尝试。希望我足够清楚。 Anyhoo,感谢您提前提供任何帮助,这个真的让我发疯, 谢谢, C5

2 个答案:

答案 0 :(得分:0)

我在很久以前做过类似的事情,当我需要发送渲染器(函数)时,它们总是显示为文本。那时我还没有找到其他方法,只是扫描收到的metaData,看是否有渲染器,并在收到的文本上调用eval来获取功能。

虽然不是&#34;做这个&#34;回答,我希望它有所帮助。

答案 1 :(得分:0)

我想为此解决这个问题,虽然可能不是最有效的解决方案。 将tpl发送到服务器时,它实际上是从中转换而来的 <img src="_images/{priorityImage}" height="20px" width="20px" />&#60;img src=&#34;_images/{priorityImage}&#34; height=&#34;20&#34; width=&#34;20&#34; /&gt;

所以现在这是我现在的解决办法: 在我调用代码加载商店之前

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('&#60;','<');
                meta.columns[c].tpl[0] = meta.columns[c].tpl[0].replace('&#62;','>');
                meta.columns[c].tpl[0] = meta.columns[c].tpl[0].replace(/\&#34;/g,'"');
            }
        }
        //lets look at all the metadata
        grid.reconfigure(store,meta.columns);
    }

现在,我正在网格中获取图像。