25.11.2015, 15:34
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Ext.data.TreeModel + Ext.data.NodeInterface
Может кто-нибудь объяснить, почему надо было так усложнять?
Есть класс Ext.data.TreeModel
Он после создания сразу же декорируется при помощи метода:
http://docs.sencha.com/extjs/6.0/6.0...ethod-decorate
в результате класс Ext.data.TreeModel приобретает методы Ext.data.NodeInterface. Есть же миксины для этого. Зачем надо так шифроваться и создавать хитрый метод decorate?
В итоге, в документации на Ext.data.TreeModel нет ссылок на методы Ext.data.NodeInterface. Это еще надо догадаться, что в нем есть метод, например, getPath.
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
25.11.2015, 15:39
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Проблема заключается в том, что класс Ext.data.NodeInterface создан тоже не обычным способом. В итоге override метода getPath класса Ext.data.NodeInterface не попадает в класс Ext.data.TreeModel
Ext.define("Khusamov.override.data.TreeModel", {
override: "Ext.data.NodeInterface",
getPath: function(field, separator, withoutFirstSeparator) {
field = field || this.idProperty;
separator = separator || '/';
var path = [this.get(field)],
parent = this.parentNode;
while (parent) {
var cur = Ext.String.trim(parent.get(field));
// Пустые элементы пропускаем.
if (cur) path.unshift(cur);
parent = parent.parentNode;
}
return (withoutFirstSeparator ? "" : separator) + path.join(separator);
}
});
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
25.11.2015, 15:43
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Сначала думал что нужно сделать override в разделе statics, но не тут-то было. Дело в том, что тело класса Ext.data.NodeInterface находтся внутри статичной функции getPrototypeBody (return {тело тут}). И как туда добраться не ясно. Точнее похоже туда не получится добраться...
В итоге делать override на класс Ext.data.TreeModel, но это частное решение. Ибо класс Ext.data.NodeInterface может где-нибудь еще использоваться...
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
25.11.2015, 15:44
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Получается, что для класса Ext.data.NodeInterface невозможны:
1) наследование
2) override
Как так вышло???
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
30.11.2015, 20:59
|
|
Профессор
|
|
Регистрация: 21.05.2015
Сообщений: 321
|
|
Легко: NodeInterface это наследие тяжёлого прошлого, динозавр из эпохи до классовой системы с mixins и override. Это сейчас жизнь легка и весела, а вы попробуйте что-нибудь серьёзное наваять на голом JavaScript с его идиотскими прототипами и полным отсутствием нормальных механизмов. Ещё и не такое получится...
Насколько я помню механизм этой фигни, она украшает прототип класса, на который натравлена. Вот от этого класса и нужно наследовать уже рабочий.
|
|
30.11.2015, 21:43
|
Профессор
|
|
Регистрация: 07.08.2013
Сообщений: 214
|
|
Сообщение от nohuhu
|
а вы попробуйте что-нибудь серьёзное наваять на голом JavaScript с его идиотскими прототипами и полным отсутствием нормальных механизмов
|
о-ла-ла ..странновато такое слышать от сотрудника сенча.. если работа не нравится надо менять
|
|
30.11.2015, 21:56
|
Профессор
|
|
Регистрация: 07.08.2013
Сообщений: 214
|
|
если по теме, сделать оверрайд для модели поглощающей NodeInterface никаких проблем не составляет:
Ext.define('MyModel', {
// class members
...
}, function () {
// do this first to be able to override NodeInterface provided stuff
Ext.data.NodeInterface.decorate(this);
this.override({
// override appendChild method
appendChild : function () {
var result = this.callParent(arguments);
// ....... do smth
return result;
}
});
});
|
|
30.11.2015, 22:42
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
Цитата:
|
Насколько я помню механизм этой фигни, она украшает прототип класса, на который натравлена. Вот от этого класса и нужно наследовать уже рабочий.
|
от какого от этого надо наследовать???
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
30.11.2015, 22:43
|
|
Соединяю Node.js и Ext JS
|
|
Регистрация: 25.06.2009
Сообщений: 1,033
|
|
siber-biber, спасибо за ответ, это интересный прием, однако! забыл что override можно и потом вызывать... после создания класса
__________________
Хусамов Сухроб, Москва, khusamov@yandex.ru
Мой JS-стек: Sencha ExtJS 6, Node.js, TypeScript.
|
|
30.11.2015, 22:55
|
|
Профессор
|
|
Регистрация: 21.05.2015
Сообщений: 321
|
|
Сообщение от siber-biber
|
о-ла-ла ..странновато такое слышать от сотрудника сенча.. если работа не нравится надо менять :stop:
|
Работа нравится, JavaScript нет. ;) Но, как было сказано когда-то давно, при всём богатстве выбора другой альтернативы нет. Вот и приходится тратить массу сил на производство конфет из того, что есть. Пичалька. :)
|
|
|
|