含义:ms-duplex实现了双向数据绑定。双向绑定通俗说,除了负责将ViewModel中的应的值放到表单元素的value中,还对表单元素偷偷绑定一些事情,用于监听用户的输入从而自动刷新ViewModel。
使用场景一:
当元素为text、password、textaera时,要求prop为一个字符串,当我们改动它的内容时,avalon就会将此元素的value值赋给prop。
<head>
<meta charset="UTF-8">
<title>avalon-duplex-prop1</title>
<script type="text/javascript" src="../avalon.min.js"></script>
<script type="text/javascript">
avalon.ready(function () {
avalon.define({
$id:"test",
username:'felixlu',
password:'Abc123',
profile:'test string'
});
avalon.scan();
})
</script>
</head>
<body>
<div ms-controller="test">
<input type="text" ms-duplex="username">
<input type="password" ms-duplex="password">
<textarea name="" id="" cols="30" rows="10" ms-duplex="profile">
</textarea>
<div ms-text="username"></div>
<div ms-text="password"></div>
<div ms-text="profile"></div>
</div>
</body>
场景二:
当元素为radio时,要求prop为一个布尔,当我们改动它的内容时,avalon就会将此元素的checkde值(布尔)赋给prop。
<head>
<meta charset="UTF-8">
<title>avalon-duplex-prop1</title>
<script type="text/javascript" src="../avalon.min.js"></script>
<script type="text/javascript">
avalon.ready(function () {
avalon.define({
$id:"test",
radios:true
});
avalon.scan();
})
</script>
</head>
<body>
<div ms-controller="test">
<div>
<input type="radio" ms-duplex="radios" />
</div><div>radios:<span ms-text="radios"></span></div>
</div>
</body>
场景三:
当元素为checkbox时,要求prop为一个数组,当我们改动它的内容时,avalon就会将此元素的value值push进prop。
<head>
<meta charset="UTF-8">
<title>avalon-dupelx-checkbox</title>
<script type="text/javascript" src="../avalon.min.js"></script>
<script>
avalon.ready(function () {
avalon.define({
$id:'test',
hobbies:[]
});
avalon.scan();
})
</script>
</head>
<body>
<div ms-controller="test">
<input ms-duplex="hobbies" type="checkbox" value="篮球" />篮球
<input ms-duplex="hobbies" type="checkbox" value="足球" />足球
<input ms-duplex="hobbies" type="checkbox" value="排球" />排球
<div ms-text="hobbies"></div>
</div>
</body>
场景四:
当元素为select时,要求prop为一个字符串或者数组(视multiple的值),当我们选中它的某一项时,avalon就会将option元素的value值或text值(没有value时)push进prop。
<head>
<meta charset="UTF-8">
<title>avalon-dupelx-select</title>
<script type="text/javascript" src="../avalon.min.js"></script>
<script type="text/javascript">
avalon.ready(function () {
avalon.define({
$id:"text",
flight:'',
hotel:[]
});
avalon.scan()
})
</script>
</head>
<body ms-controller="text">
<div>
<select ms-duplex="flight" name="" id="">
<option value="北京-天津">北京-天津</option>
<option value="北京-成都">北京-成都</option>
<option value="北京-上海">北京-上海</option>
<option value="北京-广州">北京-广州</option>
</select>
</div>
<div>
<select ms-duplex="hotel" name="" id="" multiple="true">
<option value="广州南站旅店">广州南站旅店</option>
<option value="广州怡东酒店">广州怡东酒店</option>
<option value="广州泊逸精品酒店">广州泊逸精品酒店</option>
<option value="嘉立连锁酒店红星国际店">嘉立连锁酒店红星国际店</option>
</select>
</div>
<div ms-text="flight"></div>
<div ms-text="hotel"></div>
</body>
场景五:ms-dupelx-text=“prop”
只能用于radio,用于模拟text控件的行为,要求prop为一个字符串,当我们选中某一个radio时,avalon就会将此元素的value值赋给prop用于实现多选一。
<head>
<meta charset="UTF-8">
<title>avalon-duplex-text</title>
<script type="text/javascript" src="../avalon.min.js"></script>
<script type="text/javascript">
avalon.ready(function () {
avalon.define({
$id:'text',
gender:"男"
});
avalon.scan();
})
</script>
</head>
<body ms-controller="text">
<p>
<input ms-duplex-text="gender" type="radio" value="男" />男
<input ms-duplex-text="gender" type="radio" value="女" />女
</p>
<div ms-text="gender"></div>
</body>
场景五:ms-duplex-boolean=“prop”
只能用于radio,要求prop为一个布尔值,并且元素的value为“true”或者“false”,当我们选中某一个radio时,avalon就会将此元素的value转换为布尔值,赋给对应的prop。
<head>
<meta charset="UTF-8">
<title>avalon-duplex-boolean</title>
<script type="text/javascript" src="../avalon.min.js"></script>
<script type="text/javascript">
avalon.ready(function () {
avalon.define({
$id:'test',
booleans:'true'
});
avalon.scan()
})
</script>
</head>
<body ms-controller="test">
是否在线支付:
<div>
<input ms-duplex-boolean="booleans" type="radio" name="op" value="true" />是
<input ms-duplex-boolean="booleans" type="radio" name="op" value="false" />否
</div>
<div ms-text="booleans"></div>
</body>
场景六:ms-data-duplex-observe="false"
我们可以在元素节点上定义data-dupelx-observe="false"来禁止双向同步。
<head>
<meta charset="UTF-8">
<meta name="Generator" content="EditPlus速">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<title>ms-data-duplex-observe</title>
<script type="text/javascript" src="../avalon.min.js"></script>
<script type="text/javascript">
avalon.ready(function(){
avalon.define({
$id:'test',
username:'felixlu',
password:'Abc123',
profile:'test string'
});
avalon.scan();
});
</script>
</head>
<body ms-controller="test">
<div>
<input type="text" ms-duplex="username" ms-data-duplex-observe="false" />
<input type="password" ms-duplex="password" ms-data-dupelx-observe="flase" />
<textarea ms-duplex="profile"></textarea>
</div>
<ul>
<li ms-text="username"></li>
<li ms-text="password"></li>
<li ms-text="profile"></li>
</ul>
</body>