表单元素
/ / 阅读耗时预计 2 分钟Ember提供的表单元素都是经过封装的,封装成了view
组件。经过解析渲染之后就会生成普通的HTML标签。更多详细信息你可以查看他们的实现源码:Ember.TextField、Ember.Chechbox、Ember.TextArea。
按照惯例,先创建一个route
:ember generate route form-helper
。
1,input
助手
1 | {{! //app/templates/form-helper.hbs }} |
其中可以使用在input
助手上的属性有很多,包括readonly
、value
、disabled
、name
等等,更多有关的属性介绍请移步官网介绍。
注意:对于使用在input
助手上的属性是不是使用双引号括住是有区别的。比如value='helloworld'
和value=helloworld
渲染之后的结果是不一样的,第一种写法是直接把”helloworld”这个字符串赋值设置到value
上,第二种写法是从上下文获取变量helloworld的值再设置到value
上,通常是在controller
或者route
设置的值。
看下面2行代码的演示结果:
1 | {{input name="username" placeholder="your name" value="model.helloworld"}} |
修改对应的route
类,重写model
回调,返回一个字符串;或者你可以在模板对应的controller
类设置。比如下面的第二段代码(使用命令ember generate controller form-helper
得到模板对应的controller
类。
)。
1 | // app/routes/form-helper.js |
在controller
类初始化测试数据。
1 | // app/controllers/form-helper.js |
对应的,如果你使用的是controller
初始化测试数据,那么你的模板获取数据的方式就要稍微修改下。需要去掉前缀model.
。controller
不需要在回调中初始化测试数据,可用直接定义成controller
的属性。
1 | {{input name="username" placeholder="your name" value=helloworld}} |
2,在input
助手上指定触发事件
你可以想想下,我们平常写过的javascript代码,不是可用直接在input
输入框上使用javascript的函数,同理的,input
助手上可以使用javascript函数,不过使用方式有点差别,请看下面示例。比如按enter
键触发指定的事件、失去焦点触发事件等等。
首先编写input
输入框,获取input
输入框的值有点不按常理=^=。在controller
类获取input
输入框的值是通过不用双引号的value
属性获取的。
1 | 按enter键触发 |
1 | // app/controllers/form-helper.js |
输入测试内容后按enter
键。
最后的输出结果有那么一点点意外。v
的值是正确的,v2
却是undefined
。可见在controller
层获取页面的值是通过value
这个属性而不是name
这个属性。跟我们平常HTML的input
有点不一样了!!这个需要注意下。
3,checkbook
助手
checkbox
这个表单元素也是经过Ember封装了,作为一个组件使用。使用过程需要注意的问题与前面的input
是一样的,属性是不是使用双引号所起的作用是不一样的。
1 | checkbox{{input type="checkbox" checked=isChecked }} |
你可以在controller
增加一个属性isChecked
并设置为true
,checkbox
将默认为选中。
1 | // app/controllers/form-helper.js |
4,textarea
助手
1 | {{textarea value=key cols="80" rows="3" enter="getValueByV"}} |
同样的也是通过value
属性获取输入的值。
本篇简单的介绍了常用的表单元素,使用的方式比较简单,唯一需要注意的是获取的输入框输入值的方式与平常使用的HTML表单元素有点差别。其他的基本上与普通的HTML表单元素没什么差别。
博文完整代码放在Github(博文经过多次修改,博文上的代码与github代码可能又出入,不过影响不大!),如果你觉得博文对你有点用,请在github项目上给我点个star
吧。您的肯定对我来说是最大的动力!!