我是具有Web开发背景的新手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
之间的导航。
按照说明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>
标签设置像网页上那样的简单导航机制?
答案 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");
}
您不需要在前面使用多余的波浪号(~
),我们通常将其与文件系统一起使用来表示应用程序文件夹。