Использование внешних модулей в объявлениях пользовательского интерфейса NativeScript

[Перекрестная публикация из группы 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 во время выполнения, поэтому я не уверен, что это возможно. Мы будем очень признательны за любую помощь/предложения/лучшие методы, которые можно предложить. Несколько дней рвал на себе волосы.


person Chris Tartamella    schedule 18.05.2015    source источник


Ответы (1)


Отвечено в группах Google.< /эм>

Привет, Крис,

Соглашение об именах довольно простое:

Компонент только кода (без XML):

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

В этом случае мы будем запрашивать () указанный путь (в данном случае «модули/обертка») и будем искать «Оболочку» в возвращенных экспортах (если найдено, будет создано с «новым» - вам нужен конструктор без аргументов).

XML с кодом:

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

В этом случае мы будем искать файл XML с именем Wrapper в папке «modules/wrapper» (modules/wrapper/Wrapper.xml), если он будет найден, мы загрузим содержимое файла на место. Код будет служить кодом для загруженного XML.

Дайте знать, если у вас появятся вопросы!

Спасибо

person Vladimir Enchev    schedule 19.05.2015