NativeScript-逻辑控制
来源:互联网 发布:淘宝店铺名称怎么设置 编辑:程序博客网 时间:2024/05/17 02:13
大家都知道MVC架构,而NativeScript框架采用的是 MVVM 模式, 即 “model view view model”。
Model: model 定义和表示数据。 将模型与可能使用它的各种视图分离允许代码重用;
View: view表示UI,它在NativeScript中用XML编写。 view通常数据绑定到view-model,因此在JavaScript中对view-model所做的更改会立即触发对UI组件的可视更改;
View Model: view model 包含应用程序逻辑(通常包括model),并将数据公开到视图view。 NativeScript提供了一个名为’Observable’的模块,它有助于创建可以绑定到视图的视图模型(view-model)对象。
code-behind 文件
这个不好翻译,就这样写吧,其实它就是一个页面视图后的js文件,要求就是和视图名称一样,如 login.xml对应login.js。
页面加载事件
现在在页面加载时执行一个函数:
<Page loaded="loaded">
在login.js里:
exports.loaded = function(){ console.log("loaded");}
结果:
点击事件
当点击按钮时触发事件:
在button里加一个tap属性:
<Button text="Sign in" tap="signIn"/> <Button text="Sign up for Groceries" class="link" tap = "signUp"/>
exports.signIn = function(){ alert("sign in...");}exports.signUp = function(){ alert("sign up...");}
页面跳转
要使用到frame模块,下节会说。
var frameModule = require("ui/frame");exports.signUp = function(){ var topmost = frameModule.topmost(); topmost.navigate("views/register/register");//这里不需要后缀xml}
register.xml页面:
<Page loaded="loaded"> <StackLayout> <Image src="res://logo" stretch="none" horizontalAlignment="center"/> <TextField text="{{ email }}" id="email" hint="Email Address" keyboardType="email" autocorrect="false" autocapitalizationType="none" /> <TextField text="{{ password }}" secure="true" hint="Password" /> <Button text="Sign Up" tap="register" /> </StackLayout></Page>
数据传送
从页面(view)到逻辑(view-model)
先取到元素,再取值。
设置id
<TextField id="email" hint="Email Address" />
在login.js里:
var page;var email;exports.loaded = function(args){ page = args.object;}exports.signIn = function(){ //alert("sign in..."); email = page.getViewById("email"); console.log(email.text);}
将数据绑定到组件元素
使用双大括号
login.xml
<TextField id="email" text="{{email}}" hint="Email Address" keyboardType="email" autocorrect="false" autocapitalizationType="none" /> <TextField hint="Password" text="{{ password}}" secure="true" />
login.js
var Observable = require("data/observable").Observable;var user = new Observable({ email: "user@domain.com", password: "password"});var page;var email;exports.loaded = function(args){ page = args.object; page.bindingContext = user;}
当页面加载时,类似保存密码功能
完整代码
目录结构
login.xml
<Page loaded="loaded"> <StackLayout> <Label text="hello jimo" /> <Image src="res://logo" stretch="none" horizontalAlignment="center" /> <TextField id="email" text="{{email}}" hint="Email Address" keyboardType="email" autocorrect="false" autocapitalizationType="none" /> <TextField hint="Password" text="{{ password}}" secure="true" /> <Button text="Sign in" tap="signIn"/> <Button text="Sign up for Groceries" class="link" tap = "signUp"/> </StackLayout></Page>
login.js
var frameModule = require("ui/frame");var Observable = require("data/observable").Observable;var user = new Observable({ email: "user@domain.com", password: "password"});var page;var email;exports.loaded = function(args){ page = args.object; page.bindingContext = user;}exports.signIn = function(){ //alert("sign in..."); email = page.getViewById("email"); console.log(email.text);}exports.signUp = function(){ var topmost = frameModule.topmost(); topmost.navigate("views/register/register");}
register.xml
<Page loaded="loaded"> <StackLayout> <Image src="res://logo" stretch="none" horizontalAlignment="center"/> <TextField text="{{ email }}" id="email" hint="Email Address" keyboardType="email" autocorrect="false" autocapitalizationType="none" /> <TextField text="{{ password }}" secure="true" hint="Password" /> <Button text="Sign Up" tap="register" /> </StackLayout></Page>
0 0
- NativeScript-逻辑控制
- NativeScript简介
- bash (3) 逻辑控制
- S3C2440A时钟控制逻辑
- 控制台下登录逻辑
- python_逻辑控制01
- MSSQL 逻辑控制语句
- shell脚本逻辑控制
- python逻辑控制
- JS逻辑控制语句
- SQLServer--逻辑控制语句
- 代码规范 : 控制逻辑
- NativeScript简介和试用
- 1.NativeScript Set Up
- 4.NativeScript Modules
- 5.NativeScript Data Binding
- KaliLinux安装NativeScript环境
- NativeScript-UI入门篇
- table练习
- [FUNC]发送中文 避开输入法影响
- 第十四周 项目3--判断是否为二叉排序树
- 剑指offer——面试题9:斐波那契数列
- 19 Map集合/Connections类
- NativeScript-逻辑控制
- 『sklearn学习』贝叶斯岭回归
- const放在函数后面不可以修改对象的数据
- 编程小感
- [转]UGUI —— 鼠标穿透UI问题(Unity官方的解决方法)
- 【Android】活动的生命周期
- AOE网上的关键路径
- 连接SQL Server数据库配置
- C time.h库函数