2013-03-28 70 views
0

在第一個視圖示例如下文件:不明白emberjs {{view.x}}

HTML:

<html> 
    <head> 
    <script type="text/x-handlebars" data-template-name="say-hello"> 
     Hello, <b>{{view.name}}</b> 
    </script> 
    </head> 
</html> 

JS:

var view = Ember.View.create({ 
    templateName: 'say-hello', 
    name: "Bob" 
}); 

,也許我我是一個木偶,但我真的不明白是怎麼回事。有人可以幫忙嗎?

我瞭解一些HTML /句柄周圍的{{view}}{{view}}的情況,其中的操作和事件將從javascript中的視圖定義應用。此外,我明白你可以有一個無塊單個的{{view MyApp.thingView}},它將視圖中指定的模板渲染到視圖助手使用的位置(以及在視圖定義中提供可用屬性)。

{{view.x}}實例化一個視圖,如果是的話爲什麼該示例使用創建而不是擴展。或者是引用全局var視圖的視圖(我假設沒有,因爲這是句柄。)可以擴展使用。這種形式只是試圖說您可以在視圖定義templateName設置爲模板的模板中訪問視圖的屬性?

感謝任何澄清

更新: 看例子後再次,它看起來像被用於其它片斷的方案追加的變種。所以我們可以假設這就像在兩個{{view App.aView}} {{/ view}}元素和視圖中使用模板。表單允許你獲取App.aView中的屬性。

回答

1

<更新>

爲應對這一問題的更新:

您應該使用{{#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表示略有不同的東西屬性定義。爲了分離哪個是哪個,你可以使用viewparentView關鍵字來訪問屬性:

<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> 

相關參考:

+0

謝謝你。當我剛纔看到另一個例子時,我收集了一些信息。我被視爲程序性增加而感到困惑,因爲我已經像以前一樣正常使用它們了,通常用於事件 – user2022581

+1

您的視圖助手不應該以{{#view ...開頭,因爲它們是塊助手嗎? – mavilein

+1

@mavilein是的,他們應該。更新 – MilkyWayJoe