Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.06.2012, 23:21
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Загадочное содержимое panel.items
Здравствуйте!

Я думал что написав это:

var panel = Ext.create("Ext.panel.Panel", {
		defaults: {
			xtype: "panel"
		},
		items: [{
			width: 100, height: 100
		}, {
			width: 100, height: 100
		}, {
			width: 100, height: 100
		}, {
			width: 100, height: 100
		}]
	});
	
	panel.items.each(function(item) {
		console.log(item);
	});


Я получу в консоли список объектов класса Ext.panel.Panel (так как у меня там прописано xtype: "panel").

Но вместо этого я получаю список не очень понятных мне объектов. Чем они мне непонятные? Тем, что в них нет некоторых методов, которые есть в классе Ext.panel.Panel.

В частности нет таких методов, как getWidth и getName (ширина панели и имя класса, соответственно).

Возникает вопросы:
1) Что это за объекты такие?
2) И как получить доступ к объектами в items класса Ext.panel.Panel?
Ответить с цитированием
  #2 (permalink)  
Старый 09.06.2012, 00:07
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Совсем плохо. Как выяснилось у объекта panel тоже нет метода getWidth. Хотя он вроде класса Ext.panel.Panel... А куда метод делся?

Тут ведь ясно написано: http://docs.sencha.com/ext-js/4-1/#!...ethod-getWidth
Метод имеется.

Так почему он не доступен???
Ответить с цитированием
  #3 (permalink)  
Старый 09.06.2012, 01:08
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Сообщение от khusamov
Совсем плохо. Как выяснилось у объекта panel тоже нет метода getWidth. Хотя он вроде класса Ext.panel.Panel... А куда метод делся?
он никуда не делся, у вас просто скорее всего панель не отрендерена, и вы пытаетесь получить значение ширины элементов, которых фактически нет в DOM.
renderTo: Ext.getBody()
Ответить с цитированием
  #4 (permalink)  
Старый 09.06.2012, 03:18
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Спасибо! Вот уж не думал что этот метод добавляется лишь после рендеринга.
Ответить с цитированием
  #5 (permalink)  
Старый 09.06.2012, 09:26
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Сообщение от khusamov
Вот уж не думал что этот метод добавляется лишь после рендеринга
Вы немного не поняли, он не добавляется после рендеринга, он создается во время создания объекта Ext.create("Ext.panel.Panel", {...}), но! когда вы вызываете его до рендеринга, он не может вернуть параметр, так как самого элемента еще нет. Рендеринг обеспечивает добавление элемента в dom.
Ответить с цитированием
  #6 (permalink)  
Старый 09.06.2012, 10:15
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Цитата:
он создается во время создания объекта
Тогда не ясно:
1) почему его нет в __proto__ в консоли сразу после создания без рендеринга
2) почему при попытке вызова этого метода появляется ошибка, что такого метода нету
Ответить с цитированием
  #7 (permalink)  
Старый 09.06.2012, 10:50
С++/C# modest developer
Отправить личное сообщение для nekto_O Посмотреть профиль Найти все сообщения от nekto_O
 
Регистрация: 07.11.2011
Сообщений: 244

Сообщение от khusamov
1) почему его нет в __proto__ в консоли сразу после создания без рендеринга
Как это нету?
console.log(item.__proto__.getWidth); // function()

Сообщение от khusamov
2) почему при попытке вызова этого метода появляется ошибка, что такого метода нету
TypeError: this.el is undefined - тоесть нет ссылки на el, которая создается фреймворком после того как элемент отрендерился (появился в dom).
...
panel.items.each(function(item) {
        try {
            item.getWidth();
        } catch(e) {
            alert(e); // TypeError: this.el is undefined
        }
});
...


а метод getWidth как известно возвращает el.getWidth().
Ответить с цитированием
  #8 (permalink)  
Старый 09.06.2012, 19:42
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Все, разобрался!

Спасибо!

Я совсем забыл про наследование! Там же эти __proto__ вложены друг в друга. И метод getWidth() находится очень глубоко. А я смотрел лишь первый __proto__.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Событие при наведение мыши, которое раскроет содержимое блока (элемента)... aklak Элементы интерфейса 3 27.03.2012 11:30
Не выводится содержимое ячеек таблицы SER Events/DOM/Window 2 23.06.2011 17:48
Как получить содержимое ячейки таблицы Enxiro jQuery 5 29.05.2011 16:36
По клику на ссылку меняем содержимое внутри блока goooooch Общие вопросы Javascript 6 26.01.2011 15:25
содержимое фрейма cuberboy Internet Explorer 8 20.07.2009 14:03