Как использовать js: DataGrid на Apache Royale? Проблема с Language.synthType - PullRequest
0 голосов
/ 07 октября 2019

У меня проблема с использованием этого кода, я не знаю, что такое Language.synthType ...

Используется SDK 0,9.6

<j:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
                   xmlns:local="*"
                   xmlns:models="models.*"
                   xmlns:js="library://ns.apache.org/royale/basic"  
                   xmlns:j="library://ns.apache.org/royale/jewel" 
                   xmlns:binding="org.apache.royale.binding.*"
                   applicationComplete="ev_applicationComplete()">
    <fx:Script>
        <![CDATA[
            import org.apache.royale.collections.ArrayList;



            private function ev_applicationComplete():void {
                dg.dataProvider = new ArrayList( [
                        {label:'Apple',code:'1'},
                        {label:'Nuts',code:'2'}
                    ]);
            }

        ]]>
    </fx:Script>

    <js:valuesImpl>
        <js:SimpleCSSValuesImpl />
    </js:valuesImpl>

    <js:initialView >
        <j:View>
            <j:beads>
                <js:ContainerDataBinding/>
            </j:beads>

            <js:DataGrid id="dg" width="600" height="300">
                <js:columns>
                    <js:DataGridColumn label="Label" dataField="label" columnWidth="300" />
                    <js:DataGridColumn label="Code" dataField="code"  columnWidth="300"/>
                </js:columns>
            </js:DataGrid>
        </j:View>
    </js:initialView>
</j:Application>

При запуске кода эта проблемаэто бросить

EventDispatcher.js:74 Uncaught TypeError: org.apache.royale.utils.Language.synthType is not a function
    at org.apache.royale.html.beads.DataGridView.handleInitComplete (DataGridView.js:88)
    at org.apache.royale.html.DataGrid.goog.events.EventTarget.fireListeners (eventtarget.js:284)
    at Function.goog.events.EventTarget.dispatchEventInternal_ (eventtarget.js:382)
    at org.apache.royale.html.DataGrid.goog.events.EventTarget.dispatchEvent (eventtarget.js:196)
    at org.apache.royale.html.DataGrid.org.apache.royale.events.EventDispatcher.dispatchEvent (EventDispatcher.js:71)
    at org.apache.royale.html.DataGrid.org.apache.royale.core.HTMLElementWrapper.dispatchEvent (HTMLElementWrapper.js:245)
    at org.apache.royale.html.DataGrid.addedToParent (DataGrid.js:58)
    at org.apache.royale.jewel.View.org.apache.royale.core.UIBase.addElement (UIBase.js:414)
    at org.apache.royale.jewel.View.org.apache.royale.core.GroupBase.addElement (GroupBase.js:165)
    at Function.org.apache.royale.utils.MXMLDataInterpreter.org_apache_royale_utils_MXMLDataInterpreter_initializeStrandBasedObject (MXMLDataInterpreter.js:236)

1 Ответ

1 голос
/ 07 октября 2019

Эта функция Language.synthType поддерживает некоторые особые случаи при минимальном использовании int, uint и Class для проверки типов и базовых реализаций, когда они хранятся как переменные класса (например, var intClass: Class = int; <- теперь вы можете использоватьintClass как ожидается, чтобы создать int). В этом конкретном случае он используется для некоторых проверок типа '<em> в качестве класса ', которые мы можем на самом деле оптимизировать в будущих сборках (потому что этого будет достаточно, чтобы сделать ненулевые проверки в соответствующем сайте вКод DataGridView - это всего лишь дополнительное объяснение на тот случай, если вам интересно, не беспокойтесь об этой детали).

Так что я могу понять, в чем проблема, но я не понимаю, почему в вашей копии org.apache.royale.utils.Language отсутствует эта функция. Есть ли вероятность того, что вы используете более старую версию библиотеки языка, смешанную с последней версией 0.9.6 SDK? Или, может быть, вы используете библиотеку, которая была скомпилирована с более старой версией SDK. Я предлагаю вам дважды проверить «чистую» сборку, если вы этого еще не сделали. Если вы проверяете выходные данные отладочной сборки, можете ли вы подтвердить, что в вашей консоли javascript верно следующее:

typeof org.apache.royale.utils.Language.synthType == 'function'

Если вы этого не видите, то должен быть некоторый конфликт между версиями вашей библиотеки. Подумайте, может быть, где-то используется более старая версия библиотеки языка ... Если вы можете предоставить более подробную информацию, возможно, я могу помочь.

...