#javascript #orbeon #dispatchevent #xbl
#javascript #orbeon #dispatchevent #xbl
Вопрос:
Версия Orbeon: Orbeon Forms 3.8.0.201005270113
У меня есть следующий код в файле Javascript. Этот код выполняется, но похоже, что модель в XBL не найдена.
ORBEON.xforms.Document.dispatchEvent("model-name", "event-name");
Вот модель в XBL. В XBL есть несколько моделей. Я не вижу никакого сообщения, поэтому кажется, что модель не найдена. Я не вижу никаких ошибок в журналах.
<xforms:model id="model-name" xxforms:external-events="event-name">
<xforms:action ev:event="event-name">
<xforms:message>Test</xforms:message>
</xforms:action>
</xforms:model>
Кто-нибудь знает, есть ли какой-нибудь трюк, чтобы заставить отправку работать с Javascript на XBL?
Большое спасибо!
ОБНОВЛЕНО:
Другая вещь, которая может быть проблемой (может быть?), Заключается в том, что вызов javascript из XBL с использованием экземпляра (this) не работает. Интересно, не привязан ли экземпляр класса к экземпляру компонента, поэтому он не может найти модель?
Вот вызов javascript из xbl, который не вызывает метод init:
<xxforms:script>YAHOO.xbl.fr.myTest.instance(this).init();</xxforms:script>
Вот вызов, который вызывает метод init():
<xxforms:script>YAHOO.xbl.fr.myTest.prototype.init();</xxforms:script>
Вот javascript:
YAHOO.namespace("xbl.fr");
YAHOO.xbl.fr.myTest = function() {};
ORBEON.xforms.XBL.declareClass(YAHOO.xbl.fr.myTest, "xbl-fr-myTest");
YAHOO.xbl.fr.myTest.prototype = {
},
init: function() {
alert('test');
},
valueChanged: function() {
},
};
Ответ №1:
AFAIK, вы не можете обращаться к внутренней модели XBL напрямую извне из-за ее сильной инкапсуляции.
Вместо этого вам нужно будет отправить событие на узел компонента xbl. Например, если вы хотите, чтобы экземпляр fr:currency
XBL обрабатывал определенное событие, вам нужно будет отправить событие тому fr:currency element
, что является частью вашей XForm.
Внутри XBL вы можете определить xbl:handler
s для действия на это событие, вызывая какое-либо действие JavaScript или что-то еще.
Комментарии:
1. @mstrom: Надеюсь, это сработает! Если это произойдет, не стесняйтесь принять ответ 😉 (если это не сработает, пожалуйста, сообщайте о любых ошибках)
2. @mstrom прав; из JavaScript вам нужно настроить таргетинг на элемент управления в XBL при отправке события. Подумайте об этом так: поскольку у вас может быть несколько экземпляров этого компонента на вашей странице, когда вы говорите «отправить событие
my-event
my-model
«, когда сервер получает эту информацию, он не может знать, о каком экземпляреmy-model
вы говорите. Вместо этого, если вы отправляете событие элементу управления, вы будете получать этот элемент управления из DOM и использовать его идентификатор. Этот идентификатор будет содержать всю информацию, необходимую движку XForms, чтобы узнать, о каком экземпляре компонента XBL вы говорите.