Javascript уведомления для Flex на нескольких объектах - PullRequest
1 голос
/ 24 февраля 2010

Я знаю, что с ExternalInterface мы можем зарегистрировать функции ActionScript, которые будут вызываться из JavaScript, но я хочу зарегистрировать функцию actionscript для одного класса, у которого в Приложении создано несколько экземпляров. Итак, как он будет распознавать, какая функция сценария действия объекта будет вызываться из сценария Java.

Например:

1) Сценарий Java: имеет функцию javaScripAlert (), которая вызывает функцию сценария действия showAlert ();

Т.е. testSwf.alert (значение);

функция javaScripAlert (значение) {

    TestSwf.alert();

}

2) Класс ABC имеет функцию обратного вызова showAlert (значение); Он регистрирует функцию обратного вызова «showAlert» в классе ..

Т.е. ExternalInterface. addCallback («alert», showAlert);

3) TestApplication: в этом я создал несколько объектов Calss ABC

1020 * Т.е. *

Я создал несколько объектов типа ABC в TestApplication. поэтому, когда я вызываю функцию javaScript javaScripAlert () из HTML, она вызывает только функцию showAlert (значение) объекта «abc3», но не для других объектов abc1, abc2.

Так же как и в этот момент вызывается функция другого объекта.

Спасибо и С уважением, Санджай Рупарелия

1 Ответ

0 голосов
/ 24 февраля 2010

Каждый объект Actionscript, который вызывает ExternalInterface.addCallback("myCallback", myCallback), переопределяет обратный вызов javascript. Таким образом, последний объект Actionscript для вызова, который выигрывает.

Пример

TestObject.mxml

<?xml version="1.0" encoding="utf-8"?>
<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" width="400" height="300"
    initialize="registerCallback()">
    <mx:Script>
        <![CDATA[
            import flash.external.ExternalInterface;

            protected function registerCallback():void
            {
                if (ExternalInterface.available)
                {
                    ExternalInterface.addCallback("myCallback", myCallback);
                }
            }

            protected function myCallback():void
            {
                trace(this);
            }

            protected function callJavascript():void
            {
                ExternalInterface.call("myCallback");
            }
        ]]>
    </mx:Script>
    <mx:Panel width="100%" height="100%" click="callJavascript()"/>
</mx:Canvas>

Javascript в HTML

function myCallback()
{
    getFlashContent().myCallback();
}
function getFlashContent()
{
    return document.getElementById("MyApp");
}

Пример приложения

<?xml version="1.0" encoding="utf-8"?>
<mx:Application
    xmlns:mx="http://www.adobe.com/2006/mxml" xmlns:local="*">

    <mx:Panel id="panel" width="100%" height="100%" >
        <local:TestObject width="100%" height="50"/>
        <local:TestObject width="100%" height="50"/>
        <local:TestObject width="100%" height="50"/>
    </mx:Panel>

</mx:Application>

Вывод (при нажатии)

MyApp.panel.TestObject34
MyApp.panel.TestObject34
MyApp.panel.TestObject34

В качестве обходного пути можно было бы использовать все эти ExternalInterface.addCallback("myCallback", myCallback); вызовы в классе Manager / Util (что-то вроде синглтона). Затем убедитесь, что вы добавляете его только один раз. Затем вы можете передать отдельные элементы в метод.

Lance

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...