THE APPLICATION TEMPLATE
application模板是程序的默認(rèn)模板睛廊,會在應(yīng)用啟東市被渲染形真。
你應(yīng)該在這里放置應(yīng)用的頭部,尾部超全,以及其他裝飾性的內(nèi)容咆霜。另外你應(yīng)該有至少一個{{outlet}}占位符,路由會根據(jù)當(dāng)前的URL嘶朱,選擇在outlet中插入合適的內(nèi)容蛾坯。
下面是一個例子:
頭部和尾部總是會被展示在頁面上,但是內(nèi)容區(qū)域的div會根據(jù)當(dāng)前 的URL是/posts 還是 /posts/15而做出改變疏遏。
如果你創(chuàng)建了一個標(biāo)簽脉课,但是沒有賦值template name,Ember會使用沒有模板名稱的模板作為application模板财异,并且自動餓將其編譯倘零,顯示到屏幕上
如果你使用構(gòu)建工具加載模板,請確保你模板的名稱是application戳寸。
HANDLEBARS 基礎(chǔ)
Ember.js 使用 Handlebars模板庫驅(qū)動用戶界面呈驶,Handlebars 模板和普通的HTML標(biāo)簽很像,但它給與了你內(nèi)嵌表達(dá)式以改變展示內(nèi)容的能力庆揩。
定義模板
這個模板沒有名字俐东,他會被編譯,并且作為應(yīng)用的application模板顯示給用戶订晌。你也可以給模板起一個名字虏辫,以備后續(xù)使用。
HANDLEBARS 表達(dá)式
每一個模板都有一個關(guān)聯(lián)的controller:模板就是在這里查找屬性用來顯示給用戶锈拨。
Hello, <strong>{{firstName}} {{lastName}}</strong>!
默認(rèn)的砌庄,頂層的application模板被綁定到ApplicationController:
最終的顯示結(jié)果就是:
Hello, <strong>Trek Glowacki</strong>!
這些表達(dá)式的綁定是雙向的,這意味著奕枢,如果模板中使用的值發(fā)生了變化娄昆,HTML顯示的內(nèi)容也會被自動的更新。
CONDITIONALS
有時你可能需要在屬性存在的時候才展示模板的部分內(nèi)容:
Handlebars只有在if條件為真時才會顯示if block中的內(nèi)容缝彬。
再看看一個if 配合else的例子
展示一個列表
使用{{#each}}
工具可以展示一個列表的內(nèi)容
渲染后的html內(nèi)容如下:
{{#each}}
工具函數(shù)可以有一個{{else}}分支萌焰,如果集合為空,else分支的內(nèi)容就會被顯示出來谷浅。
綁定元素屬性
除了正常的文本內(nèi)容扒俯,你可能想要你的模板包含的HTML元素的屬性綁定到controller中奶卓。
如果給{{bind-attr}}
使用布爾值,這樣就可以添加或者移除指定的屬性撼玄,例如:
添加DATA屬性
默認(rèn)情況下夺姑,view的工具函數(shù)不接受data屬性,例如:
有兩種方法可以支持data屬性掌猛,一種方式是為視圖添加一個屬性綁定
另一種方式是:在跟視圖上做自動綁定data屬性盏浙。
綁定類
元素的class屬性可以像其他屬性一樣進(jìn)行綁定
綁定到布爾值
如果你綁定的值是布爾類型,Ember.js會使用一個中劃線版本的屬性名作為類名荔茬。
你也可以指定一個類名
靜態(tài)類
如果你有一個元素废膘,他有一個靜態(tài)類和一個需要綁定的類,你需要在綁定屬性列表中包含該靜態(tài)類兔院,前綴加一個冒號:
綁定多個類
LINKS
{{link-to}} helps
你使用{{link-to}} 創(chuàng)建了一個link
ACTIONS
{{action}} HELPER
你的app經(jīng)常需要提供讓用戶和控件進(jìn)行交互的方式以改變程序的運(yùn)行狀態(tài)殖卑。
你可以使用{{action}} 工具讓一個元素可以點(diǎn)擊,當(dāng)用戶點(diǎn)擊該元素時坊萝,定義好的事件就會發(fā)送到你的應(yīng)用程序孵稽。
注意:action可以綁定到所有的DOM元素上,但不是所有的都能響應(yīng)click事件十偶,例如將一個action添加到?jīng)]有href屬性的A標(biāo)簽上菩鲜,或者添加到一個div上,一些瀏覽器就不會執(zhí)行關(guān)聯(lián)的function惦积,
ACTION參數(shù)
你可以選擇性的傳遞參數(shù)到action handler接校,在action name后的任何值將作為參數(shù)傳遞給handler
下面的例子將post對象傳遞給對應(yīng)的action定義
指定事件類型
默認(rèn)的當(dāng)用戶點(diǎn)擊元素時,{{action}} helper監(jiān)聽并觸發(fā)click事件狮崩,通過使用on選項(xiàng)蛛勉,你可以指定一個替代的事件,需要注意的是睦柴,你需要對事件的名稱格式化诽凌,例如兩個單詞的事件名稱,keypress應(yīng)該寫作keyPress
停止事件傳播
默認(rèn)坦敌,{{action}} helper 允許事件冒泡到父DOM節(jié)點(diǎn)侣诵,你可以阻止事件冒泡到父節(jié)點(diǎn)。
例如:你有一個a元素狱窘,在他的內(nèi)部有一?button杜顺,你要保證用戶點(diǎn)擊了 ?號后,a標(biāo)簽沒有被激活
如果沒有bubbles=false蘸炸,當(dāng)用戶點(diǎn)擊了button躬络,button的action就被觸犯,接著瀏覽器就會將事件傳播給a標(biāo)簽搭儒。
指定一個target
默認(rèn)的洗鸵,{{action}} helper 會將action發(fā)送給view的target越锈,這通常是view的controller,
你可以使用target選項(xiàng)指定一個替代的目標(biāo)膘滨,這個常用于發(fā)送action給view而不是controller,
INPUT HELPERS
{{input}} 和 {{textarea}} helpers被用來創(chuàng)建通用的form控件稀拐,
{{input}} helpers包裝了內(nèi)建的Ember.TextField and Ember.Checkbox views,{{textarea}}包裝了 Ember.TextArea
TEXT FIELDS
ACTIONS
分發(fā)action到指定的事件火邓,例如enter或者key-press
{{input value=firstName action="updateFirstName" on="key-press"}}
當(dāng)賦值給on時,事件名需要使用中劃線連接
CHECKBOXES
{{input type="checkbox" name="isAdmin" checked=isAdmin}}
TEXT AREAS
{{textarea value=name cols="80" rows="6"}}