Как использовать хранилище данных для установки заголовка панели инструментов в Sencha Touch

Я пытаюсь динамически установить элемент панели инструментов. Пока у меня есть кнопка «Назад», которая сбрасывает заголовок панели инструментов на «Пуск», если пользователь решит вернуться.

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

menuList.on('itemtap', function(dataView, index, item, e){
     viewport.dockedItems.items[0].setTitle('{title}');
});

Он пытается использовать переменную с именем «название» из моего массива хранилища данных. Это отлично работает для предоставления текста в мои элементы Ext.List. Но приведенный выше код устанавливает заголовок панели инструментов в строку '{title}', даже не думая о том, что это переменная.

Можете ли вы мне помочь?


person G McLuhan    schedule 16.08.2011    source источник


Ответы (3)


Список использует шаблоны, поэтому элементы в фигурных скобках оцениваются... вам нужно будет передать ссылку на переменную без кавычек. Вы не предоставили достаточно кода, чтобы я мог сказать вам, где должна быть эта информация. Если у вас уже есть переменная в области под названием title, в которую вы помещаете данные, вы можете просто удалить "{ и }"... в противном случае вам нужно будет получить необходимые данные из вашего магазина с помощью некоторых средств, таких как Ext .StoreMgr или [имя приложения].stores

person chrixian    schedule 16.08.2011
comment
Я мог бы вызвать переменную, но как мне обратиться к значению title в моем массиве? Это var title = [appname].stores.pages.title; не работает. - person G McLuhan; 16.08.2011

Две вещи. 1) Вы действительно захотите привыкнуть копаться в исходном коде ST. В этом случае, если вы посмотрите на код для «setTitle», вы увидите, что его аргумент интерпретируется как обычный HTML, а не как шаблон. Таким образом, вы не можете использовать здесь синтаксис фигурных скобок. 2) Обратите внимание, что тип аргумента «item» для обработчика событий — это Element (т. е. представление ST объекта DOM, а не выбранного объекта хранилища данных. Так что это вам не поможет. Однако аргумент «index» дает вам простой способ получить соответствующий объект из магазина.

[appname].stores.pages.getAt(index).title
person mmigdol    schedule 16.08.2011
comment
И, конечно же, вы можете получить хранилище из представления (вместо ссылки на глобальную переменную), поэтому dataView.store.pages.getAt(index) тоже должно работать и гораздо лучше DRY. - person mmigdol; 16.08.2011

Я действительно не знаю почему, но это работает, если вы используете переменные: одну для записи и одну для значения внутри этой записи. Подробное объяснение приведено в sencha. ком-форум

person G McLuhan    schedule 16.08.2011