26avalon - 指令ms-duplex(各表单元素用法)

简介: 26avalon - 指令ms-duplex(各表单元素用法)

双工绑定

双工绑定是MVVM框架中最强大的指令.react推崇单向数据流,没有双工绑定, 那么需要rudex等额外的库来实现相同的功能.

双工绑定只要用于表单元素上.或当一个div设置了contenteditable为true,也可以用ms-duplex指令.

各个表单元素的用法

<body ms-controller="test">
    <script>
        avalon.define({
            $id: 'test',
            aaa: 'aaa',
            bbb: 'bbb',
            ccc: 'ccc'
        })
    </script>
    <input ms-duplex="@aaa"/>{{@aaa}}
    <input ms-duplex="@bbb" type="password"/>{{@bbb}}
    <textarea ms-duplex="@ccc" /></textarea>{{@ccc}}
</body>

上面有三个控件,text, password, textarea它们都是属于输入型控件, 只要每为控件敲入一个字符, 后面的文本都会立即变化.那是因为它们默认是绑定oninput事件。也就是说,调用oninput事件后输入的内容都会赋值到(@aaa 等定义的变量值)

场景一:

如果想控件全部输入好,失去焦点时才同步,那么可以使用change过滤器。

<input ms-duplex="@aaa | change"/>{{@aaa}}
场景二:

如果你是做智能提示, 控件是绑定了一个AJAX请求与后端不断交互, 使用oninput事件会太频繁, 使用onchange事件会太迟钝,那么我们可以使用debounce过滤器

<input ms-duplex="@aaa | debounce(300)"/>{{@aaa}}

300ms同步一次.

另外,可编辑元素的用法与过滤器与上面三种控件一样.

<div contenteditable="true" ms-duplex="@aaa | debounce(300)"/></div>
<p>{{@aaa}}</p>
其它场景:

此外, 控件还有许多种, 像checkbox, radio,它们的同步机制也不一样.

image.png

checkbox与radio是一点击就会更新.radio要求在vm中为一个简单数据类型数据,字符串,数字或布尔. 而checkbox则要求是一个数组.并且在最开始时,ms-duplex会令radio钩上其value值等vm属性的控件, checkbox则可以勾选多个.如此一来,vm中的属性些总是等于radio与checkbox的属性值.但我们也可以让 vm的属性值等于此控件的勾选状态,这时需要用上ms-duplex-checked转换器.

代码如下:

<body ms-controller="test">
    <script>
        avalon.define({
            $id: 'test',
            aaa: '33',
            bbb: ['22']
        })
    </script>
    <input type="radio" value="11"  ms-duplex="@aaa"/>
    <input type="radio" value="22"  ms-duplex="@aaa"/>
    <input type="radio" value="33"  ms-duplex="@aaa"/>
    <input type="checkbox" value="11"  ms-duplex="@bbb"/>
    <input type="checkbox" value="22"  ms-duplex="@bbb"/>
    <input type="checkbox" value="33"  ms-duplex="@bbb"/>
    <p>radio: {{@aaa}}; checkbox:{{@bbb}}</p>
</body>

目录
相关文章
16avalon - 指令ms-attr(属性绑定)
16avalon - 指令ms-attr(属性绑定)
73 1
|
JavaScript
24avalon - 指令ms-for(循环绑定)
24avalon - 指令ms-for(循环绑定)
57 0
28avalon - 指令ms-duplex(数据格式化)
28avalon - 指令ms-duplex(数据格式化)
58 0
|
前端开发 JavaScript
34avalon - 指令ms-effect(动画绑定)
34avalon - 指令ms-effect(动画绑定)
48 0
|
前端开发
17avalon - 指令ms-css(样式绑定)
17avalon - 指令ms-css(样式绑定)
61 0
33avalon - 指令ms-validate(验证绑定)
33avalon - 指令ms-validate(验证绑定)
52 0
19avalon - 指令ms-class(类名绑定)
19avalon - 指令ms-class(类名绑定)
68 0
|
JavaScript
31avalon - 指令ms-rules(验证规则绑定)
31avalon - 指令ms-rules(验证规则绑定)
51 0
20avalon - 指令ms-active(active绑定)
20avalon - 指令ms-active(active绑定)
48 0
|
7月前
|
前端开发
CSS实现自动序号 counter-reset: NO。例如:01、02、03...;1、1.1、1.2、2、2.1、2.2、2.3等等
CSS实现自动序号 counter-reset: NO。例如:01、02、03...;1、1.1、1.2、2、2.1、2.2、2.3等等