sencha / javascript - как вызвать функцию из шаблона tpl - PullRequest
3 голосов
/ 17 июня 2011

Я использую Sencha touch и пытаюсь изменить пример Twitter, который нашел в Интернете, чтобы превратить URL-адреса из ленты Twitter в интерактивные ссылки. Я видел, что в одном из примеров в сенсорной библиотеке sencha используется функция linkify, но я не могу понять, как включить ее в свой собственный проект. Вот мой код:

t_news = new Ext.Component({
        cls:'t_news',
        title:'News',
        scroll: 'vertical',
        tpl: [
            '<tpl for=".">',
                '<div class="tweet">',
                        '<div class="avatar"><img src="{profile_image_url}" /></div>',
                        '<div class="tweet-content">',
                            '<h2>{from_user}</h2>',
                            '<p>{text:this.linkify}</p>',
                        '</div>',
                '</div>',
            '</tpl>',
        ]
    });

function linkify(value){
        return value.replace(/(http:\/\/[^\s]*)/g, "<a target=\"_blank\" href=\"$1\">$1</a>");
    }

и вот ошибка:

Uncaught TypeError: Object [object Object] has no method 'linkify'

1 Ответ

13 голосов
/ 21 июня 2011

Если вы объявите свой XTemplate явно, вы можете использовать последний параметр конструктора, который принимает объект конфигурации, где вы можете указать функции шаблона.Эти функции можно вызывать со значением: синтаксис функции.

Ваш код станет:

t_news = new Ext.Component({
cls:'t_news',
title:'News',
scroll: 'vertical',
tpl: new Ext.XTemplate(
    '<tpl for=".">',
        '<div class="tweet">',
                '<div class="avatar"><img src="{profile_image_url}" /></div>',
                '<div class="tweet-content">',
                    '<h2>{from_user}</h2>',
                    '<p>{text:this.linkify}</p>',
                '</div>',
        '</div>',
    '</tpl>',
    {
        linkify: function(value){
            return value.replace(/(http:\/\/[^\s]*)/g, "$1");
        }
    })

});

Эти функции выполняются в области действияXTemplate и может также вызываться в тегах tpl или в квадратных скобках:

'<tpl if="this.linkify(values.text) == \'some text\'">',
'</tpl>'

'<p>{[this.linkify(values.text)]}</p>'

Надеюсь, это поможет!

Cheers Stuart

...