#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){
}
});