标签水龙头上的页面导航引发异常

时间:2019-01-04 10:51:45

标签: xml nativescript

我是具有Web开发背景的新手NativeScript开发人员。我正在创建一个具有(当前)两个主页的基本应用程序:login-page.xmlsignup-page.xml

这是目录结构:

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

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

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

我要做的是建立与loginsignup之间的导航。

按照说明here进行操作后,我想出了以下想法,当您点击标签时,可以导航到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>

但是,此代码不起作用。每次点击login-page.xml上的 Label 时,都会引发异常。这是错误消息:

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

我已确保在点击标签后会调用功能 goto(),并且signup-page.xml页面会独立唤醒。

如何通过<a>标签设置像网页上那样的简单导航机制?

2 个答案:

答案 0 :(得分:0)

我终于找到了解决方案。

似乎变量 frame 是未定义的。就像一般的面向对象范例一样,我误认为它是args.object.page属性

对于常规(向前)导航,我们可以使用NativeScript的框架模块。这是一个 Js 示例:

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

注意:指定为navigate()函数的参数路径是关于目录结构的出现在问题中。是的,这看起来很奇怪,但是,尽管signup目录位于当前(登录)目录之外,但相对于根目录,我们不必对其进行引用。

答案 1 :(得分:0)

args.object.page.frame.navigate(...)似乎工作正常,只是您只需要指定相对于应用程序文件夹的模块名称即可。

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

您不需要在前面使用多余的波浪号(~),我们通常将其与文件系统一起使用来表示应用程序文件夹。

Sample Project