我正在使用带有Rails应用程序的Ember.js,但是当我想根据数据动态更改类名时,我收到错误。这是Handlebars文件:
<ul id="data-all" class="list-items">
{{#each datum in data}}
<li class="list-item">
{{#link-to 'data.datum' datum.name classNames="link-item"}}
<span class="datum-last-action datum-{{datum.name}}">{{datum.name}}</span>
{{/link-to}}
</li>
{{/each}}
</ul>
生成的错误:
Uncaught Error: Assertion Failed: An error occured while setting up template bindings. Please check for invalid markup or bindings within HTML comments.
Uncaught Error: Something you did caused a view to re-render after it rendered but before it was inserted into the DOM.
我发现的所有文档都没有发出特别警告,为什么会这样?
由于
答案 0 :(得分:1)
你的语法错了。如果您使用的是Ember&lt; = 1.9.1,那么它应该是:
<span {{bind-attr class=":datum-last-action datumName}}">{{datum.name}}</span>
其中datumName
是控制器/组件中的计算属性:
:datum-last-action
与&#34相同;如果为false,则不执行任何操作,否则请打印datum-last-action
。
迭代数组时,可以使用映射属性作为整个数据对象。在您的控制器中,创建一个类似的计算属性:
proxiedData: Ember.computed.map('data', function(datum, index) {
return Ember.ObjectProxy.create({
name: datum.name,
className: "datum-" + datum.name
});
}),
然后,在把手中:
<ul id="data-all" class="list-items">
{{#each datum in proxiedData}}
<li class="list-item">
{{#link-to 'data.datum' datum.name classNames="link-item"}}
<span {{bind-attr class=":datum-last-action datum.className"}}>{{datum.name}}</span>
{{/link-to}}
</li>
{{/each}}
</ul>