转义ExtJS模板标记(XTemplate)中的方括号?

时间:2013-03-13 15:42:10

标签: javascript extjs escaping ext-direct

我正在使用ExtJS 4,并且需要在XTemplate标记中使用方括号集。这种需要源于我需要在渲染输出中保留方括号的事实。更具体地说,我正在处理名称中包含短划线(减号)的对象属性,这需要使用方括号来访问JavaScript中的这些属性值,例如:

raw.cmsInstances[\'cms-thumb\'].url

在JavaScript中使用CSS的任何人都遇到过CSS属性名称中的破折号问题。

我无法找到实现相同结果的替代语法(方括号表示法)。

我使用ExtJS自定义对象类型解决了这个限制。特别是,我正在访问ExtDirect的原始输入并使用以下技术将值推送到模板标记中:

Ext.define('my.ux.file.IconBrowser', {
    tpl: [
        '<tpl for=".">',
            //Am trying to use this notation, due to dash in property name:
            //'<img src="{raw.cmsInstances[\'cms-thumb\'].url}"/>'
            //But this causes XTemplate to evaluate whatever is between the square
            //brackets.

            (!Ext.isIE6? '<img src="{raw.cmsInstances.cmsThumb.url}"/>' : 
            '<div style="filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'{raw.cmsInstances.cmsThumb.url}\')"></div>'),
        '</tpl>'
    ],
    initComponent: function() {
        Ext.data.Types.RAW = {
            convert: function(v, data) {
                return data.raw;
            },
            type: 'Raw'
        };
        var types = Ext.data.Types;
        this.store = Ext.create('Ext.data.Store', {
            proxy: {
                type: 'direct',
                directFn: this.loadLibraryApi,
                paramOrder: ['instanceType'],
                reader: {
                    root: 'data'
                }
            },
            fields: [
                {name: 'raw', type: types.RAW}
            ]
        });

        this.callParent(arguments);
    }
});

我更倾向于逃避方括号或找到替代它们以达到相同的结果。

提前致谢!

0 个答案:

没有答案