Как изменить динамически произвольный html внутри панели
Имеется таб-панель. В левом правом углу нужно вывести ссылку при наличии соответствующих прав у пользователя, а если их нет, то не выводить.
Пробую так var createAlbum = ''; var albumsTab = { title: 'Альбомы', id: 'albumsTab', items: [ { xtype: 'panel', layout: { type: 'vbox', align: 'stretch' }, items: [ { html: createAlbum }, previews ] } ] }; var userPermissionStore = Ext.create('UserPermissionStore'); userPermissionStore.load(function() { userPermissionStore.each(function(record) { perm = record.get('perm'); if (perm == 'yes') { albumsTab.items[0].items[0].html = '<b><a onclick="return newAlbumWindowShow()" href="">Создать альбом</a></b>' + '<br/><br/>'; } else { albumsTab.items[0].items[0].html = 'Ты не прав, Борис'; } }); }); Проверка прав работает нормально. Вопрос в том, как изменить значение св-ва html. |
А если попробовать не через свойство, а методом update?
Заодно хочу заметить что такие вот цепочки: items[0].items[0]. это потенциальный источник багов. Стоит что-то добавить в айтемы и все рушится. Воспользуйтесь референсами. Еще мысль: если вам надо просто получить "yes" с сервера то зачем стор? Ext.Ajax вам поможет. Если же там более сложная структура (объект) то десериализуйте его из строки ответа. |
Спасибо, получилось:
var albumsTab = { title: 'Альбомы', id: 'albumsTab', items: [ { xtype: 'panel', layout: { type: 'vbox', align: 'stretch' }, items: [ { html: '<div id="createAlbum"> </div>' }, previews ] } ] }; var userPermissionStore = Ext.create('UserPermissionStore'); userPermissionStore.load(function() { userPermissionStore.each(function(record) { var perm = record.get('perm'); if (perm == 'yes') { Ext.fly('createAlbum').update('<b><a onclick="return newAlbumWindowShow()" href="">Создать альбом</a></b><br/><br/>'); } }); }); Постараюсь завтра заменить стор на Ext.Ajax. |
Рад что вы на верном пути :)
Но вот еще один момент - а вы уверены что именно ссылкой надо вызывать функцию для создания альбома? Все же экст позволяет абстрагироваться от html, и в этом его несомненный плюс. Вы можете использовать кнопку, сделать ее неактивной или даже невидимой, а после проверки включить. Не видя всего кода сложно давать более точные рекомендации, однако подумайте над этим. |
Вложений: 1
Мне кажется, что ссылка тут больше подходит. Приложил скриншот - можете посмотреть.
Но сейчас у меня обнаружилась новая печаль. Заменил Store на Ext.Ajax. Почему-то работает это только на Firefox(смотрю также на IE и Opera). Ext.Ajax.request({ url: '../?cgu_check=check', success: function(response, opts) { if (response.responseText) { Ext.fly('createAlbum') .update('<b><a onclick="return newAlbumWindowShow()" href="">Создать альбом</a></b><br/><br/>'); } }, failure: function(response, opts) { alert('server-side failure with status code ' + response.status); } }); Помимо того, что Store заменил на Ajax, я теперь передаю с сервера булево значение вместо yes или no. Подумал, может IE и Opera распознают значения true и false как строки. Вернул yes/no if (response.responseText == 'yes') { Ext.fly('createAlbum') .update('<b><a onclick="return newAlbumWindowShow()" href="">Создать альбом</a></b><br/><br/>'); }По прежнему в IE и Опере не работает. Пока вернулся к стору. |
Ну ссылка так ссылка, вам виднее.
Насчет булевского значения: попробуйте вернуть с сервера json строку типа такой: "{mayCreateAlbums:true}" и десериализовать: var obj = Ext.decode(response.responseText); Потом анализируйте это свойство объекта. |
Да нет, с булевским значением-то нет проблем.
|
Нет, всё нормально работает с Ext.Ajax во всех браузерах.
Просто я проверял в IE и Опере, когда сам был залогинен в Firefox :lol: Естественно, в IE и Опере при этом сессии не было. У меня эта штука интегрирована с Wordpress и проверяет права пользователя WP. |
Часовой пояс GMT +3, время: 19:46. |