如何调用XTemplate中的函数(itemTpl)

时间:2012-09-25 18:43:09

标签: javascript extjs extjs4 sencha-touch sencha-touch-2

我想在一些将输出到视图的文本中使用Ext的String方法。

例如:

itemTpl: [
    ...
    '<tpl switch="post_type">',
    '<tpl case="new_user">',
        '<p>{post_text_teaser}</p>',
        '<p>{timestamp}</p>',
    '<tpl default>',
        '<p>' + Ext.String.ellipsis( + '{post_text_teaser}' + \, 4) + '</p>',
    ...
].join(''),

但当然第10行的连接是非法的。

您知道是否可能或如何正确地执行此操作?

3 个答案:

答案 0 :(得分:18)

这可以解决您的问题:

    '<tpl switch="post_type">',
        '<tpl case="new_user">',
            '<p>{post_text_teaser}</p>',
            '<p>{timestamp}</p>',
        '<tpl default>',
            '<p>{[Ext.String.ellipsis(values.post_text_teaser,4,false)]}</p>',
    '</tpl>'

您可以在Sencha Docs

找到有关XTemplate的更多信息

具有模板成员函数的东西是据我所知你不能以常规方式直接在itemTpl中定义它们,但是需要显式定义一个新的XTemplate然后在你的itemTpl中使用它。见例:

var tpl = new XTemplate(
    '<tpl switch="post_type">',
        '<tpl case="new_user">',
            '<p>{post_text_teaser}</p>',
            '<p>{timestamp}</p>',
        '<tpl default>',
            '<p>{[this.shorten(values.post_text_teaser)]}</p>',
    '</tpl>',
    {        
        shorten: function(name){
           return Ext.String.ellipsis(name,4,false);
        }
    }
);

...

itemTpl: tpl,

...

Senchafiddle example

这应该可以正常工作,如下面的代码(只需插入上面的XTemplate代码)。

itemTpl: new XTemplate(...),

Senchafiddle example

希望这可以解决它!

编辑注意到我错过了结束标记,有时它没有它们,但是总是使用它们是好习惯,因为它们可能会导致有趣的错误(在这种情况下,生成时缺少括号)码)。

答案 1 :(得分:1)

  

注意:以下示例无法正常工作!请查看 zelexir 答案以获得澄清!

您可以使用会员功能

itemTpl: [
    ...
    '<tpl switch="post_type">',
    '<tpl case="new_user">',
        '<p>{post_text_teaser}</p>',
        '<p>{timestamp}</p>',
    '<tpl default>',
        '<p>{[this.doAction(post_text_teaser)]}</p>',
    ...,
    {
        // XTemplate configuration:
        disableFormats: true,
        // member functions:
        doAction: function(name){
           return Ext.String.ellipsis(name + "\", 4);
        }
    }
]

答案 2 :(得分:0)

您可以在模板中使用功能

itemTpl: [
    ...
    '<tpl switch="post_type">',
    '<tpl case="new_user">',
        '<p>{post_text_teaser}</p>',
        '<p>{timestamp}</p>',
    '<tpl default>',
        '<p>{[this.concatenate(values.post_text_teaser)]}</p>',
    ...,
    {
        concatenate: function(teaser) {
               return Ext.String.ellipsis( + teaser + \, 4);
        }
    }
]