Добрый день. Есть такая задача: в совмещённом режиме продублировать кнопку, которая будет устанавливать дату в поле в карточке. Кнопку я добавил, но не могу установить значение в поле карточки. Пытался сделать через sandbox следующим образом:
В Section:
messages: {
"MessagePublish": {
mode: Terrasoft.MessageMode.BROADCAST,
direction: Terrasoft.MessageDirectionType.PUBLISH
}
},
............
methods: {
//обработчик кнопки
onSetDateTimeForPageClick: function () {
this.sandbox.publish("MessagePublish");
}
}
В Page:
messages: {
"MessagePublish": {
mode: Terrasoft.MessageMode.BROADCAST,
direction: Terrasoft.MessageDirectionType.SUBSCRIBE
},
},
init: function () {
this.callParent(arguments);
this.sandbox.subscribe("MessagePublish", this.methods.onSetDateTimeClick, this);
},
Что я упустил или неправильно делаю?
Заранее спасибо)
Нравится
Добрый день.
Если дату вы передаете, то в publish нужно указать передаваемый аргумент. В subscribe callback-метод нужно записывать без «methods» (this.onSetDateTimeClick) – и соответственно он должен быть задан в methods страницы, и принимать параметр(в который придёт передаваемый аргумент). Больше примеров на академии https://academy.terrasoft.ru/documents/technic-sdk/7-11/sandbox-obmen-s…
VladKapitanchyk,
Добрый день, метод onSetDateTimeClick имеет следующее определение
onSetDateTimeClick:function(){
this.set("UsrDateTime",(new Date).toString());
}
Где UsrDateTime текстовое поле карточки. То есть, вызов происходит без аргументов, из Section я всего лишь хочу дать сигнал, чтобы на Page вызвался метод. Исправил в subscribe callback-метод на (this.onSetDateTimeClick), но это не помогло. Также попробовал переделать на способ с передачей аргументов, и тоже не помогло(
Полный листинг способа без передачи аргумента:
В Section:
define("UsrClientModule21Section", [], function () {
return {
entitySchemaName: "UsrClientModule2",
details: /**SCHEMA_DETAILS*/ {} /**SCHEMA_DETAILS*/ ,
messages: {
"MessagePublish": {
mode: Terrasoft.MessageMode.BROADCAST,
direction: Terrasoft.MessageDirectionType.PUBLISH
}
},
diff: /**SCHEMA_DIFF*/ [{
"operation": "insert",
"parentName": "CombinedModeActionButtonsCardLeftContainer",
"propertyName": "items",
"name": "SetDateTimeButton",
"values": {
"itemType": Terrasoft.ViewItemType.BUTTON,
"caption": {
bindTo: "Resources.Strings.SetDateTime"
},
"click": {
bindTo: "onSetDateTimeClick"
},
"style": Terrasoft.controls.ButtonEnums.style.GREEN,
}
}] /**SCHEMA_DIFF*/ ,
methods: {
onSetDateTimeClick: function () {
this.sandbox.publish("MessagePublish");
//Способ с передачей аргумента.
//this.sandbox.publish("MessagePublish",(new Date).toString());
}
}
};
});
В Page:
define("UsrClientModule21Page", [], function() {
return {
entitySchemaName: "UsrClientModule2",
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
modules: /**SCHEMA_MODULES*/{}/**SCHEMA_MODULES*/,
messages: {
"MessagePublish": {
mode: Terrasoft.MessageMode.BROADCAST,
direction: Terrasoft.MessageDirectionType.SUBSCRIBE
},
},
init: function () {
this.callParent(arguments);
this.sandbox.subscribe("MessagePublish", this.onSetDateTimeClick, this);
//При передаче аргумента
// this.sandbox.subscribe("MessagePublish", function(arg)..{this.set("UsrDateTime",arg)}, this);
},
diff: /**SCHEMA_DIFF*/[]/**SCHEMA_DIFF*/,
methods: {
onSetDateTimeClick:function(){
this.set("UsrDateTime",(new Date).toString());
}
},
rules: {},
businessRules: /**SCHEMA_BUSINESS_RULES*/{}/**SCHEMA_BUSINESS_RULES*/
};
});
Добрый день.
Метод "init" должен быть в блоке "methods".
Так же рекомендую открывать консоль (F12) и читать ошибку, если будет что то наподобе "Cannot read property 'entitySchemaName'" значит проблема с неправильной структурой схемы.