Вопрос
Не работает прием сообщения. Версия 7.7.
methods: {
editRecord: function(editPageUId) {
this.callParent(arguments);
var text = "Schema6Detail";
this.sandbox.publish("PublishDetailName", text);
}
},
messages: {
"PublishDetailName": {
"mode": this.Terrasoft.MessageMode.BROADCAST,
"direction": this.Terrasoft.MessageDirectionType.PUBLISH
}
}
methods: {
subscribeSandboxEvents: function() {
this.callParent(arguments);
this.sandbox.subscribe("PublishDetailName", this.getDetailNameFromWhoOpen, this);
},
getDetailNameFromWhoOpen: function(detailName) {
var a = 5;
}
},
messages: {
"PublishDetailName": {
"mode": this.Terrasoft.MessageMode.BROADCAST,
"direction": this.Terrasoft.MessageDirectionType.SUBSCRIBE
}
}Метод getDetailNameFromWhoOpen() не вызывается.
Ответ
Проблема в том, что Вы делаете паблиш сообщения, в момент до(!) того как страница редактирования детали будет открыта, после чего открывается страница редактирования, и там вы делаете подписку. Но момент уже упущен. Вы подписываетесь на сообщение тогда, когда его уже никто не опубликует.
Вам необходимо делать publish на странице редактирования, принимая результат в переменную.
В то время как в схеме детали, делать subscribe, обработчиком которого делать функцию возвращающую значение.
Пример.
Схема детали:
define("Schema6Detail", [], function() {
return {
entitySchemaName: "Recomendation",
details: /**SCHEMA_DETAILS*/{
}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
]/**SCHEMA_DIFF*/,
methods: {
addRecord: function(editPageUId) {
this.callParent(arguments);
},
init: function() {
this.callParent(arguments);
console.log("id in detail: " + this.sandbox.id);
this.sandbox.subscribe("PublishDetailName",
this.getDetailNameFromWhoOpen, this,
[this.sandbox.id]
);
},
getDetailNameFromWhoOpen: function() {
return {
param: "test!"
};
}
},
messages: {
"PublishDetailName": {
mode: Terrasoft.MessageMode.PTP,
direction: Terrasoft.MessageDirectionType.SUBSCRIBE
}
}
};
});Схема страницы:
define("Recomendation1Page", [], function() {
return {
entitySchemaName: "Recomendation",
details: /**SCHEMA_DETAILS*/{}/**SCHEMA_DETAILS*/,
diff: /**SCHEMA_DIFF*/[
]/**SCHEMA_DIFF*/,
methods: {
onEntityInitialized: function() {
this.callParent(arguments);
var res = this.sandbox.publish("PublishDetailName",
null,
[this.getDetailId()]
);
alert(res.param);
},
getDetailId: function() {
var index = this.sandbox.id.indexOf("Recomendation1Page");
var newId = this.sandbox.id.substring(0, index);
console.log("id in page: " + newId);
return newId;
},
},
rules: {},
messages: {
"PublishDetailName": {
mode: Terrasoft.MessageMode.PTP,
direction: Terrasoft.MessageDirectionType.PUBLISH
}
},
attributes: {
}
};
});
Показать все комментарии
Войдите или зарегистрируйтесь, что бы комментировать