avalon视频学习笔记(三)

一、双向同步,双向绑定ms-duplex

    含义:ms-duplex实现了双向数据绑定。双向绑定通俗说,除了负责将ViewModel中的应的值放到表单元素的value中,还对表单元素偷偷绑定一些事情,用于监听用户的输入从而自动刷新ViewModel。

使用场景一:

当元素为text、password、textaera时,要求prop为一个字符串,当我们改动它的内容时,avalon就会将此元素的value值赋给prop。

  1. <head>
  2. <meta charset="UTF-8">
  3. <title>avalon-duplex-prop1</title>
  4. <script type="text/javascript" src="../avalon.min.js"></script>
  5. <script type="text/javascript">
  6. avalon.ready(function () {
  7. avalon.define({
  8. $id:"test",
  9. username:‘felixlu‘,
  10. password:‘Abc123‘,
  11. profile:‘test string‘
  12. });
  13. avalon.scan();
  14. })
  15. </script>
  16. </head>
  17. <body>
  18. <div ms-controller="test">
  19. <input type="text" ms-duplex="username">
  20. <input type="password" ms-duplex="password">
  21. <textarea name="" id="" cols="30" rows="10" ms-duplex="profile">
  22. </textarea>
  23. <div ms-text="username"></div>
  24. <div ms-text="password"></div>
  25. <div ms-text="profile"></div>
  26. </div>
  27. </body>

场景二:

当元素为radio时,要求prop为一个布尔,当我们改动它的内容时,avalon就会将此元素的checkde值(布尔)赋给prop。

  1. <head>
  2. <meta charset="UTF-8">
  3. <title>avalon-duplex-prop1</title>
  4. <script type="text/javascript" src="../avalon.min.js"></script>
  5. <script type="text/javascript">
  6. avalon.ready(function () {
  7. avalon.define({
  8. $id:"test",
  9. radios:true
  10. });
  11. avalon.scan();
  12. })
  13. </script>
  14. </head>
  15. <body>
  16. <div ms-controller="test">
  17.     <div><input type="radio" ms-duplex="radios" /></div>
  18. <div>radios:<span ms-text="radios"></span></div>
  19. </div>
  20. </body>

场景三:

当元素为checkbox时,要求prop为一个数组,当我们改动它的内容时,avalon就会将此元素的value值push进prop。

  1. <head>
  2. <meta charset="UTF-8">
  3. <title>avalon-dupelx-checkbox</title>
  4. <script type="text/javascript" src="../avalon.min.js"></script>
  5. <script>
  6. avalon.ready(function () {
  7. avalon.define({
  8. $id:‘test‘,
  9. hobbies:[]
  10. });
  11. avalon.scan();
  12. })
  13. </script>
  14. </head>
  15. <body>
  16. <div ms-controller="test">
  17. <input ms-duplex="hobbies" type="checkbox" value="篮球" />篮球
  18. <input ms-duplex="hobbies" type="checkbox" value="足球" />足球
  19. <input ms-duplex="hobbies" type="checkbox" value="排球" />排球
  20. <div ms-text="hobbies"></div>
  21. </div>
  22. </body>

场景四:

当元素为select时,要求prop为一个字符串或者数组(视multiple的值),当我们选中它的某一项时,avalon就会将option元素的value值或text值(没有value时)push进prop。

  1. <head>
  2. <meta charset="UTF-8">
  3. <title>avalon-dupelx-select</title>
  4. <script type="text/javascript" src="../avalon.min.js"></script>
  5. <script type="text/javascript">
  6. avalon.ready(function () {
  7. avalon.define({
  8. $id:"text",
  9. flight:‘‘,
  10. hotel:[]
  11. });
  12. avalon.scan()
  13. })
  14. </script>
  15. </head>
  16. <body ms-controller="text">
  17. <div>
  18. <select ms-duplex="flight" name="" id="">
  19. <option value="北京-天津">北京-天津</option>
  20. <option value="北京-成都">北京-成都</option>
  21. <option value="北京-上海">北京-上海</option>
  22. <option value="北京-广州">北京-广州</option>
  23. </select>
  24. </div>
  25. <div>
  26. <select ms-duplex="hotel" name="" id="" multiple="true">
  27. <option value="广州南站旅店">广州南站旅店</option>
  28. <option value="广州怡东酒店">广州怡东酒店</option>
  29. <option value="广州泊逸精品酒店">广州泊逸精品酒店</option>
  30. <option value="嘉立连锁酒店红星国际店">嘉立连锁酒店红星国际店</option>
  31. </select>
  32. </div>
  33. <div ms-text="flight"></div>
  34. <div ms-text="hotel"></div>
  35. </body>

场景五:ms-dupelx-text=“prop”

只能用于radio,用于模拟text控件的行为,要求prop为一个字符串,当我们选中某一个radio时,avalon就会将此元素的value值赋给prop用于实现多选一。

  1. <head>
  2. <meta charset="UTF-8">
  3. <title>avalon-duplex-text</title>
  4. <script type="text/javascript" src="../avalon.min.js"></script>
  5. <script type="text/javascript">
  6. avalon.ready(function () {
  7. avalon.define({
  8. $id:‘text‘,
  9. gender:"男"
  10. });
  11. avalon.scan();
  12. })
  13. </script>
  14. </head>
  15. <body ms-controller="text">
  16. <p>
  17. <input ms-duplex-text="gender" type="radio" value="男" />男
  18. <input ms-duplex-text="gender" type="radio" value="女" />女
  19. </p>
  20. <div ms-text="gender"></div>
  21. </body>

场景五:ms-duplex-boolean=“prop”

只能用于radio,要求prop为一个布尔值,并且元素的value为“true”或者“false”,当我们选中某一个radio时,avalon就会将此元素的value转换为布尔值,赋给对应的prop。

  1. <head>
  2. <meta charset="UTF-8">
  3. <title>avalon-duplex-boolean</title>
  4. <script type="text/javascript" src="../avalon.min.js"></script>
  5. <script type="text/javascript">
  6. avalon.ready(function () {
  7. avalon.define({
  8. $id:‘test‘,
  9. booleans:‘true‘
  10. });
  11. avalon.scan()
  12. })
  13. </script>
  14. </head>
  15. <body ms-controller="test">
  16. 是否在线支付:
  17. <div>
  18. <input ms-duplex-boolean="booleans" type="radio" name="op" value="true" />是
  19. <input ms-duplex-boolean="booleans" type="radio" name="op" value="false" />否
  20. </div>
  21. <div ms-text="booleans"></div>
  22. </body>

场景六:ms-data-duplex-observe="false"

我们可以在元素节点上定义data-dupelx-observe="false"来禁止双向同步。

  1. <head>
  2. <meta charset="UTF-8">
  3. <meta name="Generator" content="EditPlus速">
  4. <meta name="Author" content="">
  5. <meta name="Keywords" content="">
  6. <meta name="Description" content="">
  7. <title>ms-data-duplex-observe</title>
  8. <script type="text/javascript" src="../avalon.min.js"></script>
  9. <script type="text/javascript">
  10. avalon.ready(function(){
  11. avalon.define({
  12. $id:‘test‘,
  13. username:‘felixlu‘,
  14. password:‘Abc123‘,
  15. profile:‘test string‘
  16. });
  17. avalon.scan();
  18. });
  19. </script>
  20. </head>
  21. <body ms-controller="test">
  22. <div>
  23. <input type="text" ms-duplex="username" ms-data-duplex-observe="false" />
  24. <input type="password" ms-duplex="password" ms-data-dupelx-observe="flase" />
  25. <textarea ms-duplex="profile"></textarea>
  26. </div>
  27. <ul>
  28. <li ms-text="username"></li>
  29. <li ms-text="password"></li>
  30. <li ms-text="profile"></li>
  31. </ul>
  32. </body>

来自为知笔记(Wiz)

时间: 2024-10-14 19:23:48

avalon视频学习笔记(三)的相关文章

avalon视频学习笔记(一)

一.禁用加载器     方法一:在js文件中书写 avalon.config({ loader: false }) 方法二:在avalon源文件中添加 avalon.config({ loader: false }) 方法三:在源文件中删除amd加载器 二.作用域绑定 含义:作用域范围圈定,在一个页面中需要形成多个模块,每个模块需要实现不同功能. 1.ms-controller 可以互相嵌套的作用域 含义:在页面上表现为一个特殊属性,其属性值为ViewModel的$id,表现将在此元素或者其子孙

avalon视频学习笔记(六)

一.数据缓存     1.绑定属性ms-data-* avalon的数据缓存功能与jquery的data()类似,但不同于jquery的是:avalon是直接将数据保存在元素节点上的data-*属性上. 在从data-*属性还原数据时,它会作简单的数据转换,再返回. 在ms-data绑定属性中,对象与数组是直接保存在元素节点上. <head> <meta charset="UTF-8"> <meta name="Generator" c

avalon视频学习笔记(七)

一.属性操作     DOM操作之属性操作: 1.类名操作<div class="active">    ms-class (1)ms-class a.ms-class="active"    默认写法,为元素添加active样式 b.ms-class="active:isOk"    isOK值为true,添加active,为false,删除active c.ms-class="width{{w}}:isOK" 

avalon视频学习笔记(五)

一.插入移除处理     1.绑定属性ms-if a.当ms-if的值为真(true)时,就将元素输出到页面里面. <div ms-controller="text"> <div ms-if="true"> 根据条件显示内容 </div> </div> <div avalonctrl="test"> <div> 根据条件显示内容 </div> </div&g

avalon视频学习笔记(四)

二.显示隐藏处理 含义:效果类似于jquery的toggle,如果它后面跟着的表达式为真值时则显示它所在的元素,为假值时则隐藏. <head> <meta charset="UTF-8"> <meta name="Generator" content="EditPlus?"> <meta name="Author" content=""> <meta n

avalon视频学习笔记(二)

一.数据填充 含义:将数据打印到页面上,通过绑定属性,将页面变成动态模版 1.插值表达式 {{prop}},{{prop | html}}定界符及自动配置 含义:{{prop}}是对某一文本节点的nodeValue进行修改,因此不会影响兄弟节点,{{prop}}只是表示这个地方可以被替换,在avalon中,它只在文本节点中有效,它不能替换属性节点里的名字,特性节点的名字必须以ms-开头. a.{{prop}} <head> <meta charset="UTF-8"&

老男孩培训视频听课笔记三(在51cto上听的)

SSH 连接Linux工具CRT SSH概念: 现在有两个版本的SSH1/SSH2,建议选择SSH2 查看服务端启动情况:$netstat -lntup | grep 22 自己加的:现在CRT工具很多:crt xshell putty ,现在我使用的是xshell           另外在在centos系统里可以安装lrzsz的软件包,可以实现在crt里利用rz/sz上传/下载小文件,大文件容易出错           CRT连接经常出现的问题:              ·超时问题:利用p

Oracle学习笔记三 SQL命令

SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)               下面是这四种SQL语言的详细笔记: Oracle学习笔记三 SQL命令(二):SQL操作语言类别 Oracle数据类型 创建表时,必须为各个列指定数据类型 以下是 Oracle 数据类型的类别: 字符数据类型 CHAR类型 当需要固定长度的字符串时,使用 CHAR 数据类型. CHAR 数据类型存储字母数字值. CH

Spring视频学习笔记(二)

Spring视频学习笔记(二) XML配置里的Bean自动装配(三个来测试实现) /** * Person类 * */ public class Person { private String name; private Address address; private Car car; public String getName() { return name; } public void setName(String name) { this.name = name; } public Ad