Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2015, 22:00
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Как изменить динамически произвольный 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.
Ответить с цитированием
  #2 (permalink)  
Старый 15.01.2015, 12:14
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

А если попробовать не через свойство, а методом update?

Заодно хочу заметить что такие вот цепочки: items[0].items[0]. это потенциальный источник багов. Стоит что-то добавить в айтемы и все рушится. Воспользуйтесь референсами. Еще мысль: если вам надо просто получить "yes" с сервера то зачем стор? Ext.Ajax вам поможет. Если же там более сложная структура (объект) то десериализуйте его из строки ответа.
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2015, 23:27
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Спасибо, получилось:
var albumsTab = {
			title: 'Альбомы',
			id: 'albumsTab',
			items: [
			{
				xtype: 'panel',
				layout: {
					type: 'vbox',
					align: 'stretch'
				},
				items: [
				{
					html: '<div id="createAlbum">&nbsp;</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.
Ответить с цитированием
  #4 (permalink)  
Старый 16.01.2015, 12:57
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Рад что вы на верном пути

Но вот еще один момент - а вы уверены что именно ссылкой надо вызывать функцию для создания альбома? Все же экст позволяет абстрагироваться от html, и в этом его несомненный плюс. Вы можете использовать кнопку, сделать ее неактивной или даже невидимой, а после проверки включить. Не видя всего кода сложно давать более точные рекомендации, однако подумайте над этим.
Ответить с цитированием
  #5 (permalink)  
Старый 17.01.2015, 17:47
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Мне кажется, что ссылка тут больше подходит. Приложил скриншот - можете посмотреть.
Но сейчас у меня обнаружилась новая печаль.
Заменил 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 и Опере не работает.
Пока вернулся к стору.
Изображения:
Тип файла: jpg gallery.jpg (22.8 Кб, 3 просмотров)
Ответить с цитированием
  #6 (permalink)  
Старый 18.01.2015, 14:34
Аватар для Infarch
Профессор
Отправить личное сообщение для Infarch Посмотреть профиль Найти все сообщения от Infarch
 
Регистрация: 06.06.2014
Сообщений: 292

Ну ссылка так ссылка, вам виднее.

Насчет булевского значения: попробуйте вернуть с сервера json строку типа такой: "{mayCreateAlbums:true}" и десериализовать:

var obj = Ext.decode(response.responseText);

Потом анализируйте это свойство объекта.
Ответить с цитированием
  #7 (permalink)  
Старый 18.01.2015, 16:51
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Да нет, с булевским значением-то нет проблем.
Ответить с цитированием
  #8 (permalink)  
Старый 18.01.2015, 19:58
Аспирант
Отправить личное сообщение для WalterScott Посмотреть профиль Найти все сообщения от WalterScott
 
Регистрация: 10.05.2009
Сообщений: 57

Нет, всё нормально работает с Ext.Ajax во всех браузерах.
Просто я проверял в IE и Опере, когда сам был залогинен в Firefox
Естественно, в IE и Опере при этом сессии не было.
У меня эта штука интегрирована с Wordpress и проверяет права пользователя WP.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как вы относитесь к наркоманам? Maxmaxmaximus7 Оффтопик 7 05.02.2014 13:29
Как получить значение ячейки таблицы внутри блока div, в итерации .each() Sanu0074 jQuery 1 21.01.2014 19:32
Как изменить цвет и размер шрифта в Java savas332 Серверные языки и технологии 3 09.01.2014 17:02
Управление скроллом "а-ля тач" HonesT Элементы интерфейса 2 27.08.2013 14:25
Как с помощью PHP сохранить какие-либо изменения в HTML документе? FirstFrost Работа 6 06.09.2010 16:16