【问题标题】:ExtJS: Xtemplate doesn't recognize special characters like /n /rExtJS:Xtemplate 无法识别 /n /r 等特殊字符
【发布时间】:2015-11-02 19:58:00
【问题描述】:

我的店铺记录有一些特殊字符如下

name: "Hi \r\n\r\n Location Name: Hello\r\n\r\n"

但是当它显示在 UI 上时(使用 XTemplate),特殊字符不显示,甚至不应用。它们只是被丢弃了。

//X模板

    var cars_template = new Ext.XTemplate(
'<tpl =".">',
'<div class="cars-item">',                 
'<li>',
'<span>Name: </span><span>{[this.updateHtml(values.name)]}</span>',
'</li>',
'</div></tpl>',
{
  updateHtml: function(value){
    if(value){
      value = value.replace(/(?:\r\n|\r|\n)/g, '<br/>');            
    }
    return value;
  }
}

); 

【问题讨论】:

    标签: extjs special-characters store record xtemplate


    【解决方案1】:

    这是因为换行符不是 html,它们需要以一种或另一种方式转换为它们的 html 等效项&lt;br/&gt;

    所以对于一个字符串,你可以像这样转换新行:

    var myString = 'Hi \r\n\r\n Location Name: Hello\r\n\r\n';
    myString = myString.replace(/(?:\r\n|\r|\n)/g, '<br/>');
    

    感谢 Emissary,ExtJS 中有一个 built in 函数可以转换为 &lt;br /&gt;

    Ext.util.Format.nl2br(value)

    Here 是一个 sencha fiddle,其中包含 dataview 的工作示例,下面是相应的代码:

    var s = Ext.create('Ext.data.Store', {
                fields: ['name'],
                data: [{
                    name: "Hi \r\n\r\n Location Name: Hello\r\n\r\n"
                }, {
                    name: "Hi \r\n\r\n A Test Here: Another Test\r\n\r\n"
                }]
            });
            Ext.create('Ext.panel.Panel', {
                renderTo: Ext.getBody(),
                title: 'Example Replacement',
                layout: 'fit',
                items: [{
                    xtype:'dataview',
                    store: s,
                    tpl: [
                    '<tpl for=".">', 
                    '<div class="cars-item">', 
                    '<li>', 
                    '<span>Name: </span><span>{[this.updateHtml(values.name)]}</span>', 
                    '</li>', 
                    '</div>',
                    '</tpl>', 
                    {
                        updateHtml: function(value) {
                            console.log(value);
                            if (value) {
                                value = value.replace(/(?:\r\n|\r|\n)/g, '<br/>');
                            }
                            console.log(value);
                            return value;
                        }
                    }
                    ],
                    multiSelect: true,
                    height: 310,
                    trackOver: true,
                    itemSelector: '.cars-item',
                    emptyText: 'Nothing to display'
                }]
            });
    

    console.log 更改,这是用 &lt;br /&gt; 替换新行。

    【讨论】:

    • 谢谢@weeksdev 但我如何将它集成到我的示例中?你能检查我更新的代码吗?
    • 我什至尝试用一些随机词替换 \n\r 以确保替换正在发生但它不起作用 -- value = value.replace(/(?:\r \n|\r|\n)/g, '测试');
    • @KavitaC 添加了一个带有小提琴的 extjs 示例,演示了如何使用 dataview 来实现。您上面的示例看起来正确,因此希望您可以从工作示例中得出问题。
    • @KavitaC 可能是tpl element 中缺少的for 导致了您的问题?
    • 仅供参考 Ext.util.Format.nl2br( string )
    猜你喜欢
    • 1970-01-01
    • 2018-02-10
    • 2020-12-18
    • 2012-03-28
    • 1970-01-01
    • 1970-01-01
    • 2019-06-09
    • 2021-08-13
    • 1970-01-01
    相关资源
    最近更新 更多