当我尝试从#with帮助程序中访问视图元素时,我看到了奇怪的行为。也许这是预料之中的,但通过Changelog了解最新的Ember版本,我找不到任何我期望引起这种行为的事情。
这是我的玩具模板:
{{#with model as "bar"}}
<label {{bind-attr for="view.inputField.elementId"}}>My Label</label><br/>
{{input type="text" viewName="inputField" valueBinding="bar"}}<br/><br/>
The id for the input field is {{view.inputField.elementId}}
{{/with}}
对于Ember 1.6.1,正确显示输入字段ID并正确设置属性标签。
对于Ember 1.7.1,呈现失败完全是因为&#34;未捕获错误:断言失败:无法使用&quot; inputField.elementId&#39;在一个未定义的对象&#34;
对于Ember 1.8.1,将呈现页面,但不显示输入字段ID,并且不设置属性的标签。
对于Ember 1.9.0-beta.1,我们回到了Ember 1.6.1中的行为。
以下是每个余烬版本的jsbins:
Ember 1.6.1 - http://jsbin.com/lozape/4/edit
Ember 1.7.1 - http://jsbin.com/xicove/1/edit
(我是一个SO菜鸟,所以我必须在评论中添加我的其他jsbins,我猜)
我应该在这里发生什么?是1.7和1.8车的行为,并修复了1.9?是否有解决方法使其在1.8中正常工作?
答案 0 :(得分:0)
首先,快速说明:valueBinding="bar"
是遗留语法。您通常应该value=bar
动态绑定value
到bar
。
我搜索了错误报告,最相关的报告似乎是
https://github.com/emberjs/ember.js/issues/5348。
我不确定为什么它只会在1.9
中修复,但可能与these deprecations有关。
避免必须指定for
属性的建议是将输入放在标签内:
{#with model as "bar"}}
<label>My Label
{{input type="text" viewName="inputField" value=bar}}<br/><br/>
</label><br/>
{{/with}}
您也可以尝试使用组件封装模板的该部分,而不是使用{{with}}
帮助程序。