Вопрос

ошибка Cannot read property 'name' of undefined при открытии страницы редактирования через мастер раздела

Раздел создан сторонним пользователем

ошибка вылетает в методе, когда он пытается обратиться к элементу name контейнера в файле all-combined.js

needFlatten: function(e, t) {
        var a = t || !1;
        return (a = !Ext.isEmpty(e.name)) || (Ext.isArray(e) && e.length > 0 ? a = !Ext.isEmpty(e[0].name) : Ext.isObject(e) && Terrasoft.each(e, function(e) {
            a = this.needFlatten(e, a)
        }, this)),
        a
    },

трэйс начинается условно от ViewModelSchemaValidationMixin.js в методе getSchemaDuplicates 

здесь соотвественно всё останавливается на методе Terrasoft.JsonDiffer.getFlatObject

getSchemaDuplicates: function(schema) {
				const viewConfig = schema.viewConfig;
				const messageConfig = {};
				const result = [];
				const pathDelimiter = Terrasoft.JsonDiffer.pathDelimiter;
				const flatViewConfig = Terrasoft.JsonDiffer.getFlatObject(viewConfig, {identifyItemByPath: true});
				Object.keys(flatViewConfig).forEach(function(path) {
					const name = path.split(pathDelimiter).pop();
					const formattedPath = path.split(pathDelimiter).join(".");
					const diffObject = flatViewConfig[path];
					const caption = diffObject.caption ||
						(diffObject.labelConfig && diffObject.labelConfig.caption) ||
						"";
					messageConfig[name] = messageConfig[name] || [];
					messageConfig[name].push({
						path: formattedPath,
						caption: caption
					});
				});
				Object.keys(messageConfig).forEach(function(name) {
					if (messageConfig[name].length > 1) {
						result.push({
							name: name,
							items: messageConfig[name]
						});
					}
				});
				return result;
			},

В чем может быть причина? И буду рад советами по отладке такого клиентского кода, когда я пытался в all-combined.js ставить брэйкпоинты, у меня словно всё зависало просто

У меня такой же вопрос

3 комментария

Посмотрите тут и тут

Григорий Чех,

ни та ни та причина. причина оказалась в свойстве

"contentType": Terrasoft.ContentType.DROPDOWN

после того, как закомментировал его, всё заработало. Только теперь я не могу найти что это за свойство и какие значения оно может принимать помимо DROPDOWN и есть ли вообще у него такое значение?

{
	"operation": "insert",
	"name": "ITExecutor",
	"values": {
		"enabled": false,
		"layout": {
			"contentType": Terrasoft.ContentType.DROPDOWN,
			"colSpan": 12,
			"rowSpan": 1,
			"column": 12,
			"row": 0,
			"layoutName": "Header"
				  },
		"bindTo": "ITExecutor"
				},
	"parentName": "Header",
	"propertyName": "items",
	"index": 1
}

 

Григорий Чех,

разобрался. свойство "contentType" должно находится внутри "values", а не "layout"

Войдите или зарегистрируйтесь, чтобы комментировать