我在这个 jsfiddle中看到了一些非常奇怪的行为。
我正在构建一个手风琴控件(希望最终对 ember-bootstrap 做出很好的贡献),因此我构建了一个layout
用于包装视图内容的视图类:
Bootstrap.Accordion = Ember.View.extend({
tagName: 'div',
classNames: 'accordion',
layout: Ember.Handlebars.compile('{{yield}}')
});
然后我像这样与{{#view}}
助手一起使用它,并包含一个{{#each}}
块,该块最终将包含其他视图以设置手风琴控件的内部。到目前为止,在一种情况下,我在同一个模板中做了两次,在两个不同的手风琴控件中显示不同的信息,有点像这样:
{{#view Bootstrap.Accordion}}
{{#each content}}
<div><strong>Field 1:</strong> {{field1}}</div>
{{/each}}
{{/view}}
{{#view Bootstrap.Accordion}}
{{#each content}}
<div><strong>Field 2:</strong> {{field2}}</div>
{{/each}}
{{/view}}
但是,正如您在小提琴中看到的那样,这会产生非常意想不到的结果。基本上,视图的第二个实例是第一个的精确副本。即使是块内的静态内容{{#each}}
也不对:
Field 1: Instance 1 Field 1
Field 1: Instance 2 Field 1
Field 1: Instance 1 Field 1
Field 1: Instance 2 Field 1
但是,如果我在{{#view...}}
和{{#each}}
助手之间放置一些东西,它会按预期运行:
{{#view Bootstrap.Accordion}}
Fourth try...
{{#each content}}
<div><strong>Field 4:</strong> {{field4}}</div>
{{/each}}
{{/view}}
因此,看起来直接在帮助程序中的内容相似性{{#view}}
导致结果被 Handlebars 缓存......或其他东西。这只是一个疯狂的假设。谁能看到这里出了什么问题?
(请注意,小提琴中不包含 Bootstrap 库,因此 Bootstrap 不可能搞砸了。)