Не работает 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 |
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: .... |
Если я правильно понимаю, код функции calculate берется в виде текста и в нем заменяются все конструкции вида data.* на значения... А переменная data на входе в функцию похоже фиктивная и содержит пустые данные. Разве код функции можно получить в виде текста???
|
Думаю, можно. Ведь все классы загружаются через Экстовый лоадер, а он уже сам решает что сделать с полученным текстом. Да иначе и быть не может, ведь надо обрабатывать конструкции типа extend, controller и т.д.
|
В данном случае похоже текст берет не загрузчик, а сам класс Field, где определяется calculate. Надо бы потом внутренности посмотреть. Любопытно как они это делают. Но на оф. сайте ответили The method can't infer any dependent fields because they are encoded in a string.
|
Цитата:
var fn = function foo() { var bar = 42; }; console.log(fn.toString()); ;) |
о как.... под носом лежала, а не видел(
|
Часовой пояс GMT +3, время: 21:38. |