Как изменить динамически произвольный 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, время: 11:15. |