0

[来自 NativeScript Google 小组的交叉发布以提高知名度。]

在阅读了TJ Van Toll 的一篇文章后,我开始着手为我想要在我的 XML UI 定义中使用的 UI 组件制作我自己的模块。由于该组件是原生组件的 JavaScript 包装器,因此这有点复杂。我在项目中使用的是 TypeScript,所以我有一个 .d.ts 用于包装器。这是我所拥有的:

应用程序/模块/包装器/包装器.d.ts:

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

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

应用程序/模块/包装器/包装器-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 {
    .....
}

应用程序/模块/包装器/package.json:

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

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

应用程序/主页/主页.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 中,所以我不确定它是否可能。任何可以建议的帮助/建议/更好的做法将不胜感激。这几天一直在扯头发。

4

1 回答 1

0

在谷歌群组上回答。

嘿,克里斯,

命名约定非常简单:

仅代码组件(无 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 的代码。

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

谢谢

于 2015-05-19T11:59:28.533 回答