在ExtJS XTemplate中调用函数

Sno*_*ght 33 javascript extjs

我熟悉使用函数来确定使用xtemplate的特定条件,但不知道如何在没有条件if语句的情况下直接调用函数.

例如,我的代码想要将一些字符附加到我在xtemplate中使用的字符串中.我认为最好的方法是在渲染xtemplate时附加字符.

var myTpl = new Ext.XTemplate(
  '<tpl for=".">',

    '<tpl if="this.isThumbnailed(thumbnailed) == true">',

      '<img src=this.getThumbUrl(rawThumbUrl)/>', //this call to function does not work, also tried variations of this.

    '</tpl>',

  '</tpl>',

 {
  isThumbnailed : function(thumbnailed) {
    return ...;
  },
  getThumbUrl : function(rawThumbUrl) {
    //... //this function does not get called.
    return ...;
  }

 }
)
Run Code Online (Sandbox Code Playgroud)

Bri*_*kau 57

看一下XTemplate构造函数 API文档.那里有很多很好的例子.引用:

{[...]}之间的任何内容都被视为要在模板范围内执行的代码.

所以你应该能够做到这样的事情:

'<img src={[this.getThumbUrl(rawThumbUrl)]} />',
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 30

要调用作用域中定义的函数,需要使用以下语法:

{[this.functionName(values.valueName)]}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可以致电:

'<img src="{[this.getThumbUrl(values.rawThumbUrl)]}"/>',
Run Code Online (Sandbox Code Playgroud)

如果要使用在模板上下文之外定义this.的函数,请从函数调用中删除.

  • 谢谢,请注意"值"是具有模板当前记录属性的变量.例如,values.birthDate等. (5认同)

小智 14

前几天试图解决这个问题,并找到了一个让点击事件有效的解决方案.简短的回答是,您需要在呈现模板后使用.defer函数来设置事件侦听器.

这是我发现的例子:

var resultTpl = new Ext.XTemplate(
    '<tpl for=".">',
        '<div class="search-item">',
            '<a id={[this.getLinkId()]} href="violation.aspx?violationid={slvha}">',
                '<img src="images/icons/home.gif" style="float:left;padding-right:2px">{number}&nbsp;{street}',
            '</a>',
            '<p>Owners:&nbsp;{owners}',
            '<br/>Flag Code:&nbsp;{flag}',
            '<br/>Number of Violations:&nbsp;[{summary}]</p>',
        '</div>',
    '</tpl>', {
    getLinkId: function(values) {
        var result = Ext.id();
        this.addListener.defer(1, this, [result]);
        return result;
    },
    addListener: function(id) {
        Ext.get(id).on('click', function(e){e.stopEvent(); alert('link ' + id + ' clicked');})
    }
});
Run Code Online (Sandbox Code Playgroud)

资源