Получить элемент Frame на другом просмотре страницы - PullRequest
0 голосов
/ 02 октября 2018

У меня есть некоторый фрейм, который указывает на приборную панель / приборную панель / приборную панель:

<Page class="page" xmlns="http://www.nativescript.org/tns.xsd" loaded="load">
<GridLayout rows="*,60">
    <Frame defaultPage="dashboard/dashboard/dashboard/" id="dashboard"></Frame>
    <GridLayout row="1">
        <StackLayout verticalAlignment="bottom" row="2" class="bottom-nav">
            <GridLayout rows="*" columns="*" height="70">

                <Label class="icon4 foot-icon" row="0" col="0" id="ico4"></Label>
            </GridLayout>
        </StackLayout>
    </GridLayout>
</GridLayout>
</Page>

Теперь я хотел бы использовать dashboard.js для нацеливания на элемент этого кадра (ico4) в этом случае.Все, что я хочу, это выбрать это и добавить класс CSS для этого.Но у меня ничего не работает.Я пробовал это, но безуспешно:

dashboard.js:

var frame = require('ui/frame');
var topmost = frame.getFrameById('dashboard').getElementById('ico4');
var ic = topmost;
console.log(ic);

Мой вопрос: возможно ли нацелиться на этот ico4 каким-либо образом?Спасибо.

Редактировать: я пробовал ваш путь @ Ник Илиев, но для меня ico не определено ...

    var frame = require('ui/frame');
    var myFrame = frame.getFrameById("dashboard");

    // Its working the output :Frame<dashboard>@file:///app/dashboard/root.xml:3:5;
    console.log(myFrame);

    var myPage = myFrame.currentPage;
    // It's working too
    console.log(myPage);

    var ico = myPage.getViewById("ico4");

    // Not working - Undefined...

console.log (ico);

РЕДАКТИРОВАТЬ: я добавил простую игровую площадку, чтобы показать мою проблему: https://play.nativescript.org/?template=play-js&id=uVY4Ir

//app-root.xml (frame has ID)

<Page xmlns="http://www.nativescript.org/tns.xsd" loaded="load">
<GridLayout rows="*,60">
    <Frame defaultPage="home/home-page" id="dashboard"></Frame>
    <GridLayout row="1">
        <StackLayout verticalAlignment="bottom" row="2" class="bottom-nav">
            <GridLayout rows="*" columns="*,*,*,*,*,*" height="70">
                <Label id="ico1" text="test"></Label>
            </GridLayout>
        </StackLayout>
    </GridLayout>
</GridLayout>

Теперь home-page.js

var frameModule = require("tns-core-modules/ui/frame");
var HomeViewModel = require("./home-view-model");

var homeViewModel = new HomeViewModel();

function pageLoaded(args) {
  var page = args.object;
  page.bindingContext = homeViewModel;

  var root = frameModule.getFrameById('dashboard');
// this console.log will show frame's info
  console.log(root);
// But this below undefined. Why the frame cannot find this element ?

  var ico = root.getViewById('ico1');
  console.log(ico);
}

exports.pageLoaded = pageLoaded;

1 Ответ

0 голосов
/ 02 октября 2018

В tns-core-modules есть нет getElementById, но есть метод страницы , называемый getViewById.Чтобы использовать его, вам нужно получить ссылку на страницу через текущую ссылку на кадр.

Вот пример того, как получить текущую страницу в выбранном кадре.

const frame = getFrameById("my-frame-id");
const page = frame.currentPage;
let ico = page.getViewById("ico4");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...