Javascript.RU

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

Метод toString() в пользовательском компоненте и проблемы с ним
Где-то в недрах метода addListener

http://docs.sencha.com/extjs/5.1/5.1...od-addListener

происходит обращение к массиву, в качестве индекса используя SCOPE. Хотя SCOPE это вообще-то объект. Так ведь?

Например

namedScope = scope && namedScopes[scope];


У меня в некоторых компонентах есть метод toString(), который при таком обращении к массиву неявно вызывается. И вот когда, этот метод выдает пустую строку, то при обращении к массиву появляется ошибка:

Cannot convert object to primitive value

И теперь вопрос, что собственно делать-то???

У меня в итоге методы on() не работают.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #2 (permalink)  
Старый 12.08.2015, 00:16
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

khusamov,
Не ?
try {
  namedScope = scope && namedScopes[scope];

} catch (e) {
  namedScope =false;
}
Наверно не то
===============
Вот что-то http://docs.sencha.com/extjs/4.2.1/#...-method-handle

Последний раз редактировалось Deff, 12.08.2015 в 00:41.
Ответить с цитированием
  #3 (permalink)  
Старый 12.08.2015, 01:39
Аватар для khusamov
Соединяю Node.js и Ext JS
Отправить личное сообщение для khusamov Посмотреть профиль Найти все сообщения от khusamov
 
Регистрация: 25.06.2009
Сообщений: 1,033

Вообще-то приведенный мною код это часть метода addListener
а хак не хочется делать, так как эта проблема не только этого метода... там много где таких мест...
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #4 (permalink)  
Старый 12.08.2015, 01:50
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

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

Цитата:
Ну интуитивно, переопределить метод toString() именно для этого конкретного приложения
_ToString(), в нем и забодать проверки
Не очень понял.

Возможно вы про такой вариант. Если городить свои toString(), то называть их иначе, чтобы с не совпали с системным названием, например toSvgString(), тогда они не будут вызываться. Так вы имели ввиду?

Но тут проблемки:

1) я уже наплодил кучу таких методов и у меня уже есть программа, которая использует эту библиотеку (переименование мне может дорого стоить в случае переименовывания по смыслу выходной строки),

2) не очень хотелось бы лишаться такого красивого и лаконичного названия метода (хотя это не существенно по большому счету, но проблема не в JavaScript, а в Ext JS, где вот так, на мой взгляд не корректно, достают значения массивов).
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.

Последний раз редактировалось khusamov, 12.08.2015 в 13:45.
Ответить с цитированием
  #6 (permalink)  
Старый 12.08.2015, 14:12
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

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

Цитата:
Сделайте так чтоб toString не возвращал пустую строку.. или откажитесь от toString().
Хм... а что возвращать? Я конечно попробую возвращать null, undefined... если это поможет, то еще куда ни шло. Но возвращать непустую строку, когда надо возвратить пустую это вряд-ли у меня получится.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
  #8 (permalink)  
Старый 12.08.2015, 18:00
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

Ну для инстансов можно вот такую строку возвращать например "{}". Или например так "MyClassName: {}"
Ответить с цитированием
  #9 (permalink)  
Старый 12.08.2015, 18:02
Профессор
Отправить личное сообщение для siber-biber Посмотреть профиль Найти все сообщения от siber-biber
 
Регистрация: 07.08.2013
Сообщений: 214

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

как для чего? Для сериализации объектов. Мне нужно объекты в строку превращать. Например Path из SVG это строка с командами рисования пути. И если в Path нет сегментов, то строка должна быть пустой.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
глюк форума Gvozd Сайт Javascript.ru 11 18.03.2009 14:37