Здравствуйте, Коллеги!
Есть деталь, добавленная на несколько страниц. Необходимо реализовать разную клиентскую JavaSdcript логику в зависимости от того, на какую странице добавлена деталь. Подскажите, пожалуйста, как это сделать из JS.
Спасибо, Коллеги!
Нравится
Здравствуйте!
Для решения задачи следует:
// Взять информацию о детали
var detailInfo = this.sandbox.publish("GetDetailInfo", null, [this.sandbox.id]) || {};
// Имя карточки, на которой размещена деталь
var cardPageName = detailInfo.cardPageName;
Здравствуйте,
Спасибо за ответ!
Однако вылетает исключение на строчке
[javascript]
var detailInfo = this.sandbox.publish("getDetailInfo", null, [this.sandbox.id]) || {};
[/javascript]
Текст исключения
[javascript]
Uncaught i {message: "Message getDetailInfo is not defined in undefined module"}
[/javascript]
Сокращенный код детали:
[javascript]
define("UsrUsrVacancyCandidates1PageV2", ["GeneralDetails", "BusinessRuleModule", "ConfigurationConstants",
"LookupUtilities"
], function(GeneralDetails, BusinessRuleModule, ConfigurationConstants, LookupUtilities) {
return {
entitySchemaName: "UsrVacancyCandidates",
details: /**SCHEMA_DETAILS*/ {} /**SCHEMA_DETAILS*/ ,
diff: /**SCHEMA_DIFF*/ [{
"operation": "insert",
"name": "UsrVacancies0084c888-fcc2-467b-b586-53b355ca0765",
"values": {
"layout": {
"colSpan": 12,
"rowSpan": 1,
"column": 0,
"row": 0,
"layoutName": "Header"
},
"bindTo": "UsrVacancies",
"enabled": {
"bindTo": "getUsrVacanciesEnabled"
}
},
"parentName": "Header",
"propertyName": "items",
"index": 0
}] /**SCHEMA_DIFF*/ ,
attributes: {
methods: {
getUsrVacanciesEnabled: function() {
// Get detail info
var detailInfo = this.sandbox.publish("GetDetailInfo", null, [this.sandbox.id]) || {};
// Get card name which hosts the detail
var cardPageName = detailInfo.cardPageName;
var vacanciesCardPageName = "UsrVacanciesPage";
return cardPageName !== vacanciesCardPageName;
}
},
};
});
[/javascript]
Сообщение GetDetailInfo и метод getDetailInfo доступны в контексте детали, поэтому их можно вызывать в контексте детали:
var detailInfo = this.sandbox.publish("GetDetailInfo", null, [this.sandbox.id])|| {};
var detailInfo = this.getDetailInfo();
В Вашем случае, для того, чтобы узнать название страницы в контексте самой страницы, достаточно прочитать свойство this.name
Код выше это код разметки детали, а не карточки. Если я оттуда вызову this.name я получу имя страницы с разметкой детали. А мне нужно получить имя страницы карточки, на которую добавлена деталь.
Вы не могли бы более подробно объяснить про "контекст детали"? Где именно я должен разместить указанные Вами строки кода, чтобы они оказались "в контексте детали"?
[csharp]
// v7.5
getUsrVacanciesEnabled: function() {
var defaultValues = this.getDefaultValues();
if (!Ext.isEmpty(defaultValues)) {
return defaultValues.some(function(value){
return (value.name === "UsrCandidates")
})
}
}
// v7.6
getUsrVacanciesEnabled: function() {
var value = this.getDefaultValueByName("UsrCandidates");
return (!Ext.isEmpty(value));
}
[/csharp]
вот это еще нашёл в bpm:
var cardPageName = this.get("CardPageName");