如何在 Apache Royale 上使用 js:DataGrid? Language.synthType 的问题

Posted

技术标签:

【中文标题】如何在 Apache Royale 上使用 js:DataGrid? Language.synthType 的问题【英文标题】:How to use js:DataGrid on Apache Royale ? Issue with Language.synthType 【发布时间】:2019-10-07 17:41:38 【问题描述】:

我在使用此代码时遇到问题,我不知道 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"  >
                <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】:

Language.synthType 函数在使用 int、uint 和 Class 时支持某些特定情况,以非常简单的方式进行类型检查和作为 Class 变量保存的基本实例化(例如 var intClass:Class = int; 在这种特定情况下,它被用于一些“as Class”类型检查,我们实际上可以在未来的构建中对其进行优化(因为在相关站点中进行非空检查就足够了DataGridView 代码 - 如果您有兴趣,这只是额外的解释,不要担心那个细节)。

所以我可以理解问题出在哪里,但我不明白为什么您的 org.apache.royale.utils.Language 副本缺少该功能。您是否有可能使用旧版本的语言库与最新的 0.9.6 SDK 混合?或者,您可能正在使用使用旧版 SDK 编译的库。如果您还没有这样做,我建议您仔细检查“干净”的构建。 如果您签入调试构建输出,您能否在您的 javascript 控制台中确认以下内容为真:

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

如果您没有看到,那么我认为您的库版本之间一定存在一些冲突,也许是某处使用的语言库的旧版本......如果您能提供更多详细信息,也许我可以提供帮助。

【讨论】:

您好,非常感谢您的解释。我的 SDK 版本是 20191005 已经 3 天了。对于清洁,我不确​​定是否正确执行,因为我正在使用对我来说是新的 vscode.... 在挖掘之后,你是对的:在清洁任务之后,现在没有错误,我看到了有 2 列的网格(但为空,:(,我会挖掘为什么......非常感谢

以上是关于如何在 Apache Royale 上使用 js:DataGrid? Language.synthType 的问题的主要内容,如果未能解决你的问题,请参考以下文章

Apache Royale 上的 DataGrid 单元格背景颜色问题

Apache Royale:SDK 0.9.7 上的 DataGrid Jewel 问题

Apache Royale:相当于 j:Button 上的 enabled 属性

使用密钥获取 *** Royale 节点

clash royale怎么换中文 部落冲突皇室战争中文设置

realm royale启动错误