Может ли событие Orbeon в XBL быть отправлено из Javascript?

#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 вы говорите.