在 NativeScript UI 声明中使用外部模块

Using external modules in NativeScript UI declarations

[为了可见性从 NativeScript Google 小组发帖。]

在阅读了 TJ Van Toll 的 article 之后,我开始为我想在 XML UI 定义中使用的 UI 组件制作自己的模块.由于该组件是一个 JavaScript 围绕本机组件的包装器,所以它有点复杂。我在项目中以其他方式使用 TypeScript,所以我有一个 .d.ts 作为包装器。这是我拥有的:

app/modules/wrapper/wrapper.d.ts:

declare module "wrapper" {
    import view = require("ui/core/view");

    export class Wrapper extends view.View {
        ...
    }
}

app/modules/wrapper/wrapper-common.ts:

import definition = require("./wrapper");

export class Wrapper extends view.View implements definition.Wrapper {
   .....
}

app/modules/wrapper/wrapper.{iOS,android}.ts:

import common = require("./wrapper-common");

export class Wrapper extends common.Wrapper {
    .....
}

app/modules/wrapper/package.json:

{ "name" : "wrapper",
  "main" : "wrapper.js" }

我有点不确定模块的命名约定(即它应该只是最深的目录名称,还是应该像 [=56= 中包含的 UI 模块那样是完整路径]?) 但我认为其余部分是正确的。在 XML 我有:

app/main-page/main-page.xml:

<Page xmlns="http://www.nativescript.org/tns.xsd"
      xmlns:myns="modules/wrapper"
      loaded="pageLoaded" >
    <myns:Wrapper>

    </myns:Wrapper>
</Page>

目前,当这段代码执行时,我在 component-builder.js 中遇到异常,因为它无法创建模块。但是,在调用堆栈上,我在 iOS 运行时内的本机方法 __executeModule 中。一个切题(但值得解决)是我们作为用户可以将 Xcode 附加到设备并调试运行时吗?这是在运行时的 require.js 中,所以我不确定它是否可能。任何可以建议的 help/suggestions/better 做法将不胜感激。为了这个我已经扯了几天头发了。

已在 google groups 上回答。

嗨,克里斯,

命名约定非常简单:

仅代码组件(无 XML):

... 
xmlns:myns="modules/wrapper" 
... 
<myns:Wrapper 
... 

在这种情况下,我们将 require() 指定的路径(在这种情况下为 "modules/wrapper"),并将在返回的导出中查找 "Wrapper"(如果找到,将使用 "new" 创建- 你需要没有参数的构造函数)。

XML 代码:

... 
xmlns:myns="modules/wrapper" 
... 
<myns:Wrapper 
... 

在这种情况下,我们将在 "modules/wrapper" 文件夹 (modules/wrapper/Wrapper.xml) 中查找名为 Wrapper 的 XML 文件,如果找到,我们将加载文件内容地方。该代码将作为已加载 XML 的代码隐藏。

如果您有任何问题,请告诉我!

谢谢