Вопрос

Lookup поле в детали Средства связи контакта

Добрый день!

Подскажите, как корректно добавить лукап-поле в деталь средств связи. С текстовым проблем не возникает, а вот  лукап поле с типом Enum не получается сделать (чтобы при нажатии в поле появлялся выпадающий список со значениями справочника указанного в bindTo).

Вот мой код добавления конфига данного поля:
    getCountryConfig: function() {
                    var rowConfig = ViewUtilities.getContainerConfig("grid-cols-9",
                            ["grid-cols-3"]);
                    var result =
                    {
                        className: "Terrasoft.ComboBoxEdit",
                        value: {
                            bindTo: "Country"
                        },
                        visible: {bindTo: "MobilePhoneFieldsVisibility"}
                    };
                    var label = this.getLabel("");
                    rowConfig.items.push(label, result);
                    return rowConfig;
                },

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

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

Добавил биндинг из листа, но не заходит в метод указанный в prepareList

getCountryConfig: function() {
                    var rowConfig = ViewUtilities.getContainerConfig("grid-cols-9",
                            ["grid-cols-3"]);
                    
                    var result =
                    {
                        className: "Terrasoft.ComboBoxEdit",
                        value: {bindTo: "Country"},
                        list: {bindTo: "CountryList"},
                        prepareList: {bindTo: "getCountryList"},
                        visible: {bindTo: "MobilePhoneFieldsVisibility"}
                    };
                    
                    var label = this.getLabel("");
                    rowConfig.items.push(label, result);
                    return rowConfig;
                },

Добрый день.

Для добавления справочного поля в детали средств связи, для начала, нужно заместить метод _getCommunicationEditItemViewConfig из схемы BaseCommunicationDetail. В методе нужно добавть блок if для типа Lookup, подписаться на prepareList и забиндится на справочное поле, которое ранее добавили в деталь ContactCommunication.

Так же, добавить логику выгрузки коллекции значений для справочного поля - в методе, который указали в prepareList, например getCommunicationList.

На скриншоте набросала приблизительный план действий - http://prntscr.com/ivb7ox

Demchenko Olha,

Добрый день, Ольга!
метод 

getCommunicationItemViewConfig переопределен, в нем вызываю метод получения конфига моего элемента. 
В BaseCommunicationViewModel метод выгрузки коллекции для prepareList, коллекция грузится, все ок.
Проблема в том, что работает только для уже существующих на карточке записей. А вот при добавлении новой список не прогружается.
Вот мой код. Подскажите, возможно есть идеи, почему не работает для новых записей.

getCommunicationItemViewConfig: function() {
	var itemViewConfig = ViewUtilities.getContainerConfig("item-view",
			//["detail-edit-container-user-class", "control-width-15"]);
			["grid-row grid-module"]);
	var typeMenuItems = this.getTypeMenuItems();
	var typeButtonConfig = this.getTypeButtonConfig(typeMenuItems);
	var iconTypeButtonConfig = this.getIconTypeButtonConfig();
	var textEditConfig = this.getTextEditConfig();
	var isValidConfig = this.getIsValidConfig();
	var operatorCodeConfig = this.getOperatorCodeConfig();
	var validNameConfig = this.getNameLabel();
	var operatorCodeNameConfig = this.getOperatorCodeLabel();
	var countryConfig = this.getCountryConfig();
	var countryLabelConfig = this.getCoutryLabel();
	itemViewConfig.items.push(validNameConfig, isValidConfig, countryLabelConfig, countryConfig,
	operatorCodeNameConfig, operatorCodeConfig, textEditConfig, typeButtonConfig);
	return itemViewConfig;
},
 
getCountryConfig: function() {
	var rowConfig = ViewUtilities.getContainerConfig("grid-cols-9",
			["grid-cols-3"]);
 
	var result =
	{
		className: "Terrasoft.ComboBoxEdit",
		value: {bindTo: "Country"},
		list: {bindTo: "CountryList"},
		prepareList: {bindTo: "getCountryList"},
		visible: {bindTo: "getMobilePhoneFieldsVisibility"}
	};
	var label = this.getLabel("");
	rowConfig.items.push(label, result);
	return rowConfig;
},
 
getCountryList: function() {
	var esq = Ext.create("Terrasoft.EntitySchemaQuery", {
		rootSchemaName: "Country"
	});
	esq.addColumn("Id");
	esq.addColumn("ISOAlpha2");
	esq.getEntityCollection(function(result) {
		var collection = Ext.create("Terrasoft.Collection");
		if (result.success) {
			var selectedTags = result.collection;
			selectedTags.each(function(item) {
				var countryId = item.get("Id");
				var countryName = item.get("ISOAlpha2");
				var menuItemConfig = {
					value: countryId,
					displayValue: countryName
				};
				collection.add(countryId, menuItemConfig);
			}, this);
		}
		this.set("CountryList", collection);
 
	}, this);
},

 

Тетиков Дмитрий Владимирович,

Здравствуйте!

Проблема в том, что работает только для уже существующих на карточке записей. А вот при добавлении новой список не прогружается.

Не совсем понятно, не подгружается список средств связи или список значений справочника?

Какую информацию дала отладка?

Demchenko Olha,

Ольга, добрый день!

Не прогружается выпадающий список, см. скриншот.
Если запись есть в БД, то по клику в поле список появляется.
Если запись только что создана, нажатием на кнопку добавления и в БД еще нет записи, то при клике в комбобокс, ничего не происходит.
При этом в консоли никаких ошибок нет, во все методы отладчик заходит одинаково в обоих случаях.

 

Тетиков Дмитрий Владимирович,

Проверьте, может в методе getCountryList не находится какой-то параметр. Я могу только посоветовать выполнять отладку этого метода, сравнить какие значения параметров в новой записи и уже существующей. Потому что так сказать сложно что не так.

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