Проблема с загрузкой изображения в html-поля

Добрый день. Столкнулся со следующий проблемой при использовании html-полей. Если на странице присутствует несколько таких полей, то загрузка изображения в одно из них приведёт к загрузке такого же изображения и во все остальные html-поля, загруженные на странице. Т.е., если на другой вкладке есть html-поле, но вкладка ещё ни разу не открывалась, то всё хорошо. Но если второе поле на той же вкладке, или другая вкладка уже была открыта, то изображение будет загружено сразу во все. Пример diff-а ниже:

	{
		"operation": "insert",
		"name": "DescriptionHtmlEdit",
		"values": {
			"contentType": Terrasoft.ContentType.RICH_TEXT,
			"layout": {
				"colSpan": 24,
				"rowSpan": 1,
				"column": 0,
				"row": 1
			},
			"bindTo": "Description",
			"labelConfig": {
				"visible": true
			},
			"controlConfig": {
				"imageLoaded": {
					"bindTo": "insertImagesToNotes"
				},
				"images": {
					"bindTo": "NotesImagesCollection"
				}
			}
		},
		"parentName": "ProductInfoBlock",
		"propertyName": "items",
		"index": 2
	},
	{
		"operation": "insert",
		"name": "AdditionalDescriptionHtmlEdit",
		"values": {
			"contentType": Terrasoft.ContentType.RICH_TEXT,
			"layout": {
				"colSpan": 24,
				"rowSpan": 1,
				"column": 0,
				"row": 2
			},
			"bindTo": "AdditionalDescription",
			"labelConfig": {
				"visible": true
			},
			"controlConfig": {
				"imageLoaded": {
					"bindTo": "insertImagesToNotes"
				},
				"images": {
					"bindTo": "NotesImagesCollection"
				}
			}
		},
		"parentName": "ProductInfoBlock",
		"propertyName": "items",
		"index": 3
	},

Сталкивался ли кто-либо с подобной проблемой? 

Нравится

7 комментариев

ага. расковыривали методы insertImagesToNotes и NotesImagesCollection и правили их. Ибо по-умолчанию система работает с одним полем Notes, и одной коллекцией под картинки NotesImagesCollection. 

Вам нужно будет под каждый контрол добавлять ещё 1 коллекцию под images

Варфоломеев Данила,

Да, в insertImagesToNotes, а точнее в методе, который он вызывает захардкодили NotesImagesCollection. То, что биндится в контрол конфиге на что-то влияет?

Бершеда Д. Н. пишет:

То, что биндится в контрол конфиге на что-то влияет?

Конечно)

накидаю пример как мы это решили. методы:

insertImagesToNotes: function(files, tag) {
	this.Terrasoft.each(files, function(file) {
		this.addImageToNotes(file, tag);
	}, this);
},
addImageToNotes: function(file, tag) {
	FileAPI.readAsDataURL(file, function(tag, event) {
		if (event.type !== "load") {
			return;
		}
 
		var imagesCollection = this.get(tag);
		var image = this.getNotesImagesCollectionItem(event.target.name, event.result);
		imagesCollection.addItem(image);
	}.bind(this, tag));
},
 
init: function() {
	this.callParent(arguments);
	this.initImagesCollections();
},
initImagesCollections: function() {
	this.set("TESTImagesCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
	this.set("TEST2ImagesCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
	this.set("TEST3ImagesCollection", this.Ext.create("Terrasoft.BaseViewModelCollection"));
}

ну и добавление 1 элемента в дифф:

{
	"operation": "insert",
	"name": "TEST",
	"values": {
		"layout": {
			"colSpan": 24,
			"rowSpan": 2,
			"column": 0,
			"row": 0,
			"layoutName": "ProcessingTabGridLayout588b2b18"
		},
		"labelConfig": {
			"visible": false
		},
		"controlConfig": {
			"imageLoaded": {
				"bindTo": "insertImagesToNotes"
			},
			"images": {
				"bindTo": "TESTImagesCollection"
			}
		},
		"enabled": true,
		"tag": "TESTImagesCollection",
		"contentType": 4
	},
	"parentName": "ProcessingTabGridLayout588b2b18",
	"propertyName": "items",
	"index": 0
}

И далее в диффе по аналогии. Получается удобно. Для каждого элемента дописываем только новую коллекцию в initImagesCollection и через tag кидаем нужную коллекцию для конкретного элемента.

Попробовал добавить свою ImagesCollection и обработчик. Но что-то не получается. После добавления картинки теперь ничего не происходит. Что я мог упустить? Пример кода ниже:

//в diff
{
	"operation": "insert",
	"name": "DescriptionHtmlEdit",
	"values": {
		"contentType": Terrasoft.ContentType.RICH_TEXT,
		"layout": {
			"colSpan": 24,
			"rowSpan": 1,
			"column": 0,
			"row": 1
		},
		"bindTo": "Description",
		"labelConfig": {
			"visible": true
		},
		"controlConfig": {
			"imageLoaded": {
				"bindTo": "insertImagesToDescription"
			},
			"images": {
				"bindTo": "DescriptionImagesCollection"
			}
		}
	},
	"parentName": "ProductInfoBlock",
	"propertyName": "items",
	"index": 2
},
 
//в атрибутах
"DescriptionImagesCollection": {
	type: this.Terrasoft.ViewModelColumnType.VIRTUAL_COLUMN
},
 
//в методах
 
insertImagesToDescription: function(files) {
	this.Terrasoft.each(files, function(file) {
		this.addImageToHtmlField(file, "DescriptionImagesCollection");
	}, this);
},
 
addImageToHtmlField: function(file, collectionName) {
	FileAPI.readAsDataURL(file, function(event) {
		if (event.type !== "load") {
			return;
		}
		var imagesCollection = this.get(collectionName);
		var image = this.getNotesImagesCollectionItem(event.target.name, event.result);
		imagesCollection.addItem(image);
	}.bind(this));
},

 

Бершеда Д. Н. пишет:

Что я мог упустить?

инициализацию коллекции в initImagesCollections

 

Варфоломеев Данила,

Я её добавлял, только в onEntityInitialized. Попробовал Ваш вариант - всё получилось. Спасибо!

Показать все комментарии