Как узнать родительскую страницу на которую добавлена деталь из JS
Здравствуйте, Коллеги!
Есть деталь, добавленная на несколько страниц. Необходимо реализовать разную клиентскую JavaSdcript логику в зависимости от того, на какую странице добавлена деталь. Подскажите, пожалуйста, как это сделать из JS.
Спасибо, Коллеги!
Нравится
Здравствуйте!
Для решения задачи следует:
// Взять информацию о детали
var detailInfo = this.sandbox.publish("GetDetailInfo", null, [this.sandbox.id]) || {};
// Имя карточки, на которой размещена деталь
var cardPageName = detailInfo.cardPageName;
Здравствуйте,
Спасибо за ответ!
Однако вылетает исключение на строчке
var detailInfo = this.sandbox.publish("getDetailInfo", null, [this.sandbox.id]) || {};
Текст исключения
Uncaught i {message: "Message getDetailInfo is not defined in undefined module"}
Сокращенный код детали:
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; } }, }; });
Сообщение GetDetailInfo и метод getDetailInfo доступны в контексте детали, поэтому их можно вызывать в контексте детали:
var detailInfo = this.sandbox.publish("GetDetailInfo", null, [this.sandbox.id])|| {};
var detailInfo = this.getDetailInfo();
В Вашем случае, для того, чтобы узнать название страницы в контексте самой страницы, достаточно прочитать свойство this.name
Код выше это код разметки детали, а не карточки. Если я оттуда вызову this.name я получу имя страницы с разметкой детали. А мне нужно получить имя страницы карточки, на которую добавлена деталь.
Вы не могли бы более подробно объяснить про "контекст детали"? Где именно я должен разместить указанные Вами строки кода, чтобы они оказались "в контексте детали"?
// 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)); }
вот это еще нашёл в bpm:
var cardPageName = this.get("CardPageName");