Использование функций-членов в Sench Touch List itemTpl

#javascript #sencha-touch #extjs #javascript-framework

#javascript #sencha-touch #extjs #javascript-фреймворк

Вопрос:

В документации о List упоминается, что itemTpl следует синтаксису XTemplate.

Я хотел бы использовать функции-члены в моем itemTpl

Если я инициализирую itemTpl с помощью XTemplate и что функция-член не имеет аргумента, она работает:

             items: {
            xtype: 'list',
            store: myStore,
            itemTpl: new Ext.XTemplate('<i>{name} {[this.hello()]}</i>', {
                hello: function () {
                    return 'Hello';
                }
            })
  

Но как только я пытаюсь передать аргумент (как в двух примерах ниже), он больше не работает:

             items: {
            xtype: 'list',
            store: myStore,
            itemTpl: new Ext.XTemplate('<i>{name} {[this.helloWorld(name)}</i>', {
                helloWorld: function (name) {
                    return 'Hello '   name;
                }
            })


        items: {
            xtype: 'list',
            store: myStore,
            itemTpl: new Ext.XTemplate('<i>{name} {name:helloWorld}</i>', {
                helloWorld: function (string) {
                    return 'Hello '   name;
                }
            })
  

Ошибка типа: ‘undefined’ не является функцией (вычисление ‘fm.HelloWorld(значения [‘name’])’)

Я думаю, мне не следует создавать новый объект Ext.XTemplate. Есть ли какое-либо решение для передачи функций-членов без создания отдельного XTemplate?

Или я должен отказаться от списка и сам создать список в шаблоне?

Ответ №1:

Следующий код должен работать:

 items: {
    xtype: 'list',
    store: myStore,
    itemTpl: new Ext.XTemplate(
         '<i>{name} {[this.helloWorld(values.name)]}</i>', 
         {
             compiled: true,
             helloWorld: function (name) {
                 return 'Hello '   name;
             }
         })
}
  

ваш первый пример будет работать, values.name вместо того, чтобы просто name

Ответ №2:

Использовать {[this.helloWorld(name)} вместо {[this.helloWorld(values.name)}

Комментарии:

1. если он находится внутри строки, вы должны использовать values.name , как в ответе Адама (Ст. 2.2)

Ответ №3:

Это использование также в порядке:

 itemTpl :new Ext.XTemplate( '<section class="movieListItem">',
                    '<img src="{UserLogo:this.showLogo}"/>',
                    '<h1>{NickName}</h1>',
                    '<div>{Content}</div>',
                    '</section>',
                    {
                        showLogo:function(value){

                            } 

                });