Навигация по странице при нажатии на ярлык создает исключение - PullRequest
0 голосов
/ 04 января 2019

Я начинающий разработчик NativeScript с опытом веб-разработки.Я создаю базовое приложение с (в настоящее время) двумя основными страницами: login-page.xml и signup-page.xml.

Вот структура каталогов:

app
|-- app-root.xml
|-- app.css
|-- app.js

|-- signup
    |-- signup-page.xml

|-- login
    |-- login-page.xml
    |-- login-page.js

Я пытаюсь установить навигацию к login и signup.

Пройдя по инструкциям здесь , мне пришла в голову следующая идея перейти к signup-page.xml, когда Метка набрана , нажата .

<!--login/login-page.xml-->
<Label class="small-text" text="Join us" tap="goto" />  

...

<!--login-page.js-->
exports.goto = function (args) {
    args.object.page.frame.navigate("~/signup/signup-page");
}

...

<!--app-root.xml-->
<Frame defaultPage="login/login-page"></Frame>

Этот код, однако, не работает.При каждом нажатии Label на login-page.xml выдается исключение.Вот сообщение об ошибке:

An uncaught Exception occurred on "main" thread.
com.tns.NativeScriptException:
Calling js method onTouch failed

Я убедился, что функция goto () вызывается при нажатии на метку, и страница signup-page.xml независимо работает.

Как настроить простой механизм навигации, как это происходит на веб-страницах с помощью тега <a> ??

Ответы [ 2 ]

0 голосов
/ 04 января 2019

args.object.page.frame.navigate(...), кажется, просто отлично работает, только нужно указать только имя модуля относительно папки приложения.

<!--login-page.js-->
exports.goto = function (args) {
   args.object.page.frame.navigate("signup/signup-page");
}

Вам не нужен дополнительный символ тильды (~)на передней панели, которую мы обычно используем с файловой системой для обозначения приложения в папке.

Пример проекта

0 голосов
/ 04 января 2019

Я наконец нашел решение.

Кажется, что переменная frame не определена. Привыкнув к общей объектно-ориентированной парадигме, я принял ее за свойство из args.object.page.

Для общей (прямой) навигации мы можем использовать кадровый модуль из NativeScript. Вот пример Js :

var frame = require("ui/frame");
...
...
exports.goto = function(){
    frame.topmost().navigate("signup/signup-page");
}

ПРИМЕЧАНИЕ : путь , указанный в качестве аргумента для функции navigate(), относится к структуре каталогов , показанной в вопрос. Да, это кажется странным, но, хотя каталог signup находится за пределами текущего каталога (логина), нам не нужно ссылаться на него относительно корневого каталога.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...