Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Не работает Ext.data.field.Field.calculate()? (https://javascript.ru/forum/extjs/62778-ne-rabotaet-ext-data-field-field-calculate.html)

khusamov 28.04.2016 23:18

Не работает Ext.data.field.Field.calculate()?
 
Не работает Ext.data.field.Field.calculate()?

Воспроизведение бага в песочнице
https://fiddle.sencha.com/#fiddle/19h3

Ext.define("Employee", {
            extend: "Ext.data.Model",
            fields: [{
                name: "username",
                type: "string"
            }, {
                name: "name",
                type: "string",
                calculate: function(data) {
                    console.log("calculate", data)
                    var tpl = "{personlastname} {personname} {personmiddle}";
                    return new Ext.Template(tpl).apply(data);
                }
            }, {
                name: "personlastname",
                type: "string",
                
            }, {
                name: "personname",
                type: "string"
            }, {
                name: "personmiddle",
                type: "string"
            }]
            
        });
        
        var e = new Employee();
        e.set("personlastname", "Jon");
        e.set("personname", "Silver");
        e.set("personmiddle", "Bob");
        
        console.log("name =", e.get("name")); // Должен был показать "Jon Silver Bob"


https://www.sencha.com/forum/showthr...#post113 3954

khusamov 29.04.2016 00:24

The method can't infer any dependent fields because they are encoded in a string. You'll need to explicitly declare them:

name: 'string',
depends: ['personlastname', 'personname', 'personmiddle'],
calculate: ....

khusamov 29.04.2016 12:35

Если я правильно понимаю, код функции calculate берется в виде текста и в нем заменяются все конструкции вида data.* на значения... А переменная data на входе в функцию похоже фиктивная и содержит пустые данные. Разве код функции можно получить в виде текста???

Infarch 29.04.2016 15:48

Думаю, можно. Ведь все классы загружаются через Экстовый лоадер, а он уже сам решает что сделать с полученным текстом. Да иначе и быть не может, ведь надо обрабатывать конструкции типа extend, controller и т.д.

khusamov 29.04.2016 15:50

В данном случае похоже текст берет не загрузчик, а сам класс Field, где определяется calculate. Надо бы потом внутренности посмотреть. Любопытно как они это делают. Но на оф. сайте ответили The method can't infer any dependent fields because they are encoded in a string.

nohuhu 29.04.2016 21:11

Цитата:

Сообщение от khusamov (Сообщение 415285)
Разве код функции можно получить в виде текста???

Функция JavaScript это объект:

var fn = function foo() {
    var bar = 42;
};

console.log(fn.toString());


;)

khusamov 29.04.2016 22:51

о как.... под носом лежала, а не видел(


Часовой пояс GMT +3, время: 21:38.