我已經定義了以下Ember.View模板傳遞到Ember.View:如何從屬性
App.ControlGroup = Ember.View.extend
classNames: ['control-group']
layoutName: 'controlGroup'
對於其佈局模板(controlGroup.handlebars)看起來是這樣的:
<label class="control-label">{{ view.label }}</label>
<div class="controls">
{{ yield }}
</div>
下面是一個使用上述定義的視圖的示例:
{{#view App.ControlGroup label="Property code"}}
{{#if isNew}}
{{view Em.TextField valueBinding="code"}}
{{else}}
<p>{{code}}</p>
{{/if}}
{{/view}}
這將產生下面的HTML:
<div id="ember10170" class="ember-view control-group">
<label class="control-label">Property code</label>
<div class="controls">
<input id="ember10172" class="ember-view ember-text-field" type="text">
</div>
</div>
這正是我想要的。但是,我瞭解到,在模板中使用視圖的屬性(請參見上面的{{ view.label }}
,在controlGroup.handlebars中}})是一種反模式,並且該屬性查找應該來自視圖的控制器。所以我想知道如何去做。在這種情況下,該屬性與視圖(html片段)本身有關,所以我的實現似乎對我來說合法,但我很好奇看到其他方法。
很好的方式來看待關注的分離。關於在模板中使用視圖屬性的問題,我沒有看到它如何被濫用或被認爲是濫用。如您所說,它也用於內置的Ember視圖,例如Ember.Select模板包含{{view.prompt}}。 – 2013-03-28 10:49:07
其中一種過度使用是在視圖上聲明一個'fullName'計算屬性,該屬性連接模型的'firstName'和'lastName'屬性。它肯定應該在控制器上聲明。這很好地符合問題的分離:它是與模型相關的屬性,但不應該被持久化。是的,在視圖上定義'fullName'在技術上是可行的,但它確實不屬於此處。我認爲強調保持視圖不含模型相關的東西也是因爲視圖曾經是財產查詢和行爲的默認目標。 – zeppelin 2013-03-28 11:13:01
這使得總體感覺。有趣的是,你提到fullName應該在控制器上聲明,因爲這是[指南中給出的計算模型屬性的典型示例](http://emberjs.com/guides/object-model/computed-properties/)。重要的是,我現在很確定我在模板中正確使用了view屬性,並沒有引入反模式。謝謝。 – 2013-03-28 14:17:47