访问#with帮助程序中的Ember视图

时间:2014-11-07 21:59:14

标签: ember.js handlebars.js

当我尝试从#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中正常工作?

1 个答案:

答案 0 :(得分:0)

首先,快速说明:valueBinding="bar"是遗留语法。您通常应该value=bar动态绑定valuebar

我搜索了错误报告,最相关的报告似乎是 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}}帮助程序。