从模型中获取页面视图元素 class

Getting a page view element from a model class

我有一个模型 class 并且想要访问 ui 元素。

frameModule.topmost().getViewById("id") 或

frameModule.topmost().page.getViewById("id")

不工作。

据我了解您的需求,希望此解决方案对您有所帮助。

在 XML 中,假设您有 UI 个带有 ID 的元素。你会在控制器中得到它。例如:

page.xml中:

<Label id="test"/>

page-view-model.js 的绑定对象 class 中,创建一个具有标签类型的 属性:

var labelModule = require("ui/label");
var Label = labelModule.Label;

class Someclass extends Observable {
    public label: Label;
}

page.js中:

function pageLoaded(args) {
    var page = args.object;
    var myLabel = page.getViewById("test");
    var context = new Someclass();
    page.bindingContext = context;
    context.label = myLabel;
}

有很多方法可以获取对 Page 对象的引用。文档是了解它们的很好参考:https://v7.docs.nativescript.org/ui/components/page#page-reference

为了回答您的问题,在视图模型 class 中获取对 Page 对象的引用的常用方法是使用 EventData 传递给每个事件,例如 tap 点击 Button 时的事件。

onButtonTap(args: EventData) {
  const button = args.object as Button;
  const page = button.page;
  // ...
}