[Перекрестная публикация из группы NativeScript Google для наглядности.]
После прочтения статьи TJ Van Toll Я приступил к созданию собственного модуля для компонента пользовательского интерфейса, который я хотел использовать в своем XML-определении пользовательского интерфейса. Это немного усложняется тем фактом, что компонент является оболочкой 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 {
.....
}
приложение/модули/обертка/package.json:
{ "name" : "wrapper",
"main" : "wrapper.js" }
Я немного не уверен в соглашении об именах модуля (т.е. должно ли это быть просто самое глубокое имя каталога или это должен быть полный путь, как в модулях пользовательского интерфейса, содержащихся в tns_modules?), но я думаю, что остальное это правильно. В XML у меня есть:
приложение/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, потому что он не может создать модуль. Однако в стеке вызовов я нахожусь в собственном методе __executeModule внутри среды выполнения iOS. Касательный вопрос (но на него стоит ответить): можем ли мы, пользователи, прикрепить Xcode к устройству и отладить среду выполнения? Это находится в require.js во время выполнения, поэтому я не уверен, что это возможно. Мы будем очень признательны за любую помощь/предложения/лучшие методы, которые можно предложить. Несколько дней рвал на себе волосы.