Как правильно создать обработчик событий кнопки «Нажать» в Nativescript с приложением JS - PullRequest
0 голосов
/ 22 мая 2019

Я изучаю нативный скрипт на JS, и у меня возникают проблемы с фундаментальными вещами. Я хочу перейти на другую страницу (с помощью обработчика событий кнопки касания) и не знаю, почему она не будет работать, когда страницы находятся в определенной папке (и почему метод из книги не работает xx).

Я попробовал точные шаги из книги на нативном языке (https://www.nativescript.org/get-the-nativescript-book), означает:

var frameModule = require("ui/frame");
function onTap()
{
   frameModule.topmost().navigate("pages/second-page/item-page "); 
}

exports.onTap = onTap;

но это не сработало полностью. Я также пытался реализовать метод из этой демонстрации https://play.nativescript.org/?template=play-js&id=YwE1kV&_ga=2.244066690.664730264.1558375788-1200954945.1554045393 Этот метод работает, однако страницы должны быть в одной папке (и я хочу, чтобы они были в разных папках).

Когда я разделил их на folder1, folder2, я заметил, что эти папки (folder1 и folder2) должны быть помещены в подпапку comon (потому что, если они находятся в папке 'app', это не работает). Как я могу это понять?

Вот как это выглядит сейчас (в папке «app» находится подпапка «pages». В папке «pages» находятся «main-page» (с main-page.xml и main-page. js) и папки «вторая страница» (с item-page.js и item-page.xml).

Это моя главная страница (начальная страница приложения)

XML:
<Page class="page">
    <StackLayout>
        <Label text="Tap the button"/>
        <Button id="button" text="Tap me!" tap="onTap"></Button>
        <Label text="this_sucks" textWrap="true"/>
    </StackLayout>
</Page>

JS:
function onTap(args) {
    const button = args.object;
    const page = button.page;
    page.frame.navigate("pages/second-page/item-page");
}

exports.onTap = onTap;

Когда папки 'main-page' и 'second-page' находились непосредственно в папке 'app', я не мог заставить ее работать ... (page.frame.navigate ("../ second- page / item-page "). Я тоже не понимаю, почему метод из книги не сработал

var frameModule = require("ui/frame");
function onTap()
{
   frameModule.topmost().navigate("pages/second-page/item-page"); 
}

exports.onTap = onTap;

Не могли бы вы попытаться объяснить это поведение?

1 Ответ

0 голосов
/ 24 мая 2019

Я на самом деле подозреваю, что эта проблема вызвана HMR (HMR - это новая система горячего перезапуска модулей). Предполагается, что она вышла из бета-версии и отличается качеством выпуска в 5.3 и 5.4 NativeScript. Тем не менее, с прямыми приложениями JS, кажется, все еще очень глючит.

Недавно я столкнулся с той же самой проблемой, что и вы, и не мой код не работал, а то, что HMR испортил весь код.

Решение состоит в том, чтобы переключить приложение на использование системы рабочих процессов "Legacy" для создания приложения.

В основной папке приложения вы найдете файл с именем nsconfig.json, откройте этот файл и измените значение "useLegacyWorkflow": false на "useLegacyWorkflow": true. тогда вы должны сбросить папку платформ через:

  • tns platform clean android (при условии, что вы используете Android)
  • tns platform clean ios (при условии, что вы используете ios)

И тогда вы должны просто запустить tns run android и / или tns run ios - НЕ ИСПОЛЬЗУЙТЕ флаги --hmr или --bundle; так как это снова попытается использовать систему HMR, которая является проблемой ...

Обратите внимание, что для будущих читателей это исправление предназначено только для версии 5.3+ и, вероятно, не будет работать в версии 6.0; что должно сгладить эти проблемы JavaScript HMR.

...