Публикация

Передать значение (сообщение) из схемы детали на страницу детали.

Вопрос

Не работает прием сообщения. Версия 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: {
        }
    };
});

 

Нравится

Поделиться

0 комментариев
Показать все комментарии