Цитата |
---|
Ахат Баязи написал: ACHTUNG!!! Вопрос: Подскажите, как на нее повесить свою JS-логику? |
итак, решение (не знаю, может можно было элегантнее, но решение рабочее получилось).
РЕШЕНИЕ:
для того чтобы повесить на кнопку свою JS-логику, пришлось:
1. отказаться от штатного метода отрисовки кнопок:
getTaskControls() просто переименовал его в
__getTaskControls()
2. После этого, в форму задания БП стали отрисовываться кнопки из метода:
ShowTaskForm()3. в метод:
ShowTaskForm() 3.1. добавил свою кнопку:
Код |
---|
$buttons .='<input type="button" id="w4a-ecp-sign" name="sign" value="'.($arTask["PARAMETERS"]["TaskButton1Message"] <> ''
? $arTask["PARAMETERS"]["TaskButton1Message"] : GetMessage("BPAA_ACT_BUTTON1"))
.'" class="bp-button bp-button bp-button-accept" style="border: none"/>'; |
3.2. добавил свою JS-логику:
Код |
---|
$js = '';
$runtime = CBPRuntime::GetRuntime();
$js .= $runtime->ExecuteResourceFile(
__FILE__,
'script.php',
array(
'arResult' => array(
'TASK_ID' => 12345
),
)
);
$buttons .=$js; |
3.3. в файле
script.php можно писать свой код в inline (в тегах <script> </script>)
Код |
---|
defined('B_PROLOG_INCLUDED') || die;
/** @var array $arResult */
CJSCore::Init(array("jquery"));
/** JS-логика */
?>
<sc ript type="text/javascript">
$("#w4a-ecp-sign").click(function(){
alert("script.php: !!!JQ-click")
});
</sc ript> |
3.4. ACHTUNG!!! Если в файле
script.php добавить JS-файл через конструкцию:
Код |
---|
\Bitrix\Main\Page\Asset::getInstance()->addJs('/local/activities/w4aecpapproveactivity/script.js'); |
JS-логика работать не будет.
Точнее, она сработает только при первом вызове задания БП. Все было бы ничего, но задание в последнее время открываются в POPUP-окне.
И если при первом открытии POPUP-окна логика работает, то после закрытия и повторного открытия - не работает.
4. Решение проблемы описанной в пп 3.4. для того чтобы JS-логика заработала из файла:
/local/activities/w4aecpapproveactivity/script.js4.1. в
script.php добавляем код:
Скрытый текст |
---|
Код |
---|
/** JS-логика */
\Bitrix\Main\Page\Asset::getInstance()->addJs('/local/activities/w4aecpapproveactivity/script.js');
$editorCfg = array(
'id' => $arResult['TASK_ID'],
'taskId' => $arResult['TASK_ID'],
'sessId' => bitrix_sessid(),
'siteId' => SITE_ID,
'ownerType' => 'W4A_ECP_SIGN',
'serviceUrl'=> '/local/components/w4a/debt.list/ajax.php?'.bitrix_sessid_get(),
// 'permissionEntityType' => $arResult['ENTITY_TYPE'],
);
?>
<sc ript type="text/javascript">
BX.namespace("BX.Crm");
BX.W4aEcp = {};
BX.ready(
function() {
let editor = BX.W4aEcpSign.create(
"<?=$arResult['TASK_ID']?>",
<?=CUtil::PhpToJSObject($editorCfg)?>
);
BX.W4aEcp = editor;
}
);
</sc ript> |
|
4.2.
script.js:Скрытый текст |
---|
Код |
---|
BX.namespace("BX.Crm");if (typeof(BX.W4aEcpSign) === "undefined") {
BX.W4aEcpSign = function () {
this._id = "";
this._settings = {};
this._serviceUrl = "";
};
BX.W4aEcpSign.prototype = {
/** Common methods */
initialize: function (id, config) {
this._id = id;
this._settings = config ? config : {};
this._serviceUrl = this.getSetting('serviceUrl', '');
if (!BX.type.isNotEmptyString(this._serviceUrl)) {
throw 'W4aEcpSign: could not find service URL.';
}
// отправить на расчеты
let ecpSignBtn = BX('w4a-ecp-sign');
if (ecpSignBtn) {
BX.bind(
ecpSignBtn,
"click",
BX.delegate(this.handlerEcpSignDocument, this)
);
}
console.log('this');
console.log(this);
},
getSetting: function (name, defaultval) {
return typeof (this._settings[name]) != 'undefined' ? this._settings[name] : defaultval;
},
setSetting:function(name, value){
this._settings[name] = value;
},
handlerEcpSignDocument:function(){
alert('tutut-handlerEcpSignDocument');
}
};
BX.W4aEcpSign.create = function (id, config)
{
let self = new BX.W4aEcpSign();
self.initialize(id, config);
return self;
};
} |
|