<更新>
爲應對這一問題的更新:
您應該使用{{#view App.SomeView}} ... {{/view}}
如果視圖沒有與之關聯的任何模板。 另一方面,如果通過命名約定或templateName
屬性爲此視圖創建了模板,則應使用{{view App.SomeView}}
。例如:
{{view Ember.TextField valueBinding="view.userName"}}
< /更新>
當您在車把模板看到{{view.propertyName}}
,這意味着你消耗/從查看你在渲染一個屬性,所以你最初的假設是:那種權利。例如:
App = Em.Application.create();
App.HelloView = Em.View.extend({
welcome: 'Willkommen',
userName: 'DHH',
greeting: function() {
return this.get('welcome') + ' ' + this.get('userName');
}.property('welcome', 'userName')
});
然後在您的應用程序模板:
<script type="text/handlebars">
<h1>App</h1>
{{#view App.HelloView}}
{{view.greeting}}
{{/view}}
</script>
在這種情況下,{{view.greeting}}
部分會研究視圖(HelloView
)名爲greeting
財產的範圍(這將是對於這些屬性中的任何一個都是相同的),而不是在父視圖(暗示的ApplicationView
)中。只要調用在視圖中定義的屬性,就必須使用{{view.propertyName}}
。 控制器中定義的屬性可以直接訪問而不需要前綴。
這樣做的原因之一就是確保您正在調用正確的屬性。考慮以下幾點:
App = Em.Application.create();
App.ApplicationView = Em.View.extend({
userName: 'David'
});
App.HelloView = Em.View.extend({
welcome: 'Willkommen',
userName: 'DHH',
greeting: function() {
return this.get('welcome') + ' ' + this.get('userName');
}.property('welcome', 'userName')
});
現在,這兩個應用程序視圖和內部視圖已經與一個名爲userName
表示略有不同的東西屬性定義。爲了分離哪個是哪個,你可以使用view
和parentView
關鍵字來訪問屬性:
<script type="text/handlebars">
<h1>App</h1>
<!-- this comes from the ApplicationView -->
<h3>{{view.userName}}'s Profile</h3>
{{#view App.HelloView}}
<!-- this comes from the HelloView -->
{{view.welcome}} {{view.userName}}
{{/view}}
</script>
如果你想/需要使用真實姓名和暱稱在這個例子中,你必須到:
<script type="text/handlebars">
<h1>App</h1>
{{#view App.HelloView}}
<!-- this comes from the ApplicationView -->
<h3>{{parentView.userName}}'s Profile</h3>
<!-- this comes from the HelloView -->
{{view.welcome}} {{view.userName}}
{{/view}}
</script>
相關參考:
謝謝你。當我剛纔看到另一個例子時,我收集了一些信息。我被視爲程序性增加而感到困惑,因爲我已經像以前一樣正常使用它們了,通常用於事件 – user2022581
您的視圖助手不應該以{{#view ...開頭,因爲它們是塊助手嗎? – mavilein
@mavilein是的,他們應該。更新 – MilkyWayJoe