W3Cschool
恭喜您成為首批注冊(cè)用戶(hù)
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
簡(jiǎn)單講屬性綁定其實(shí)就是在HTML標(biāo)簽內(nèi)(是在一個(gè)標(biāo)簽的””中使用)直接使用handlebars
表達(dá)式??梢灾苯佑?code>handlebars表達(dá)式的值作為HTML標(biāo)簽中某個(gè)屬性的值。
準(zhǔn)備工作:
ember generate route binding-element-attributes
<div id="logo">
<img src={{model.imgUrl}} alt='logo' />
</div>
在對(duì)應(yīng)的route:binding-element-attributes
里增加測(cè)試數(shù)據(jù)。
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
return { imgUrl: 'http://i1.tietuku.com/1f73778ea702c725.jpg' };
}
});
運(yùn)行之后模板會(huì)編譯成如下代碼:
<div id="logo">
<img alt="logo" src="http://i1.tietuku.com/1f73778ea702c725.jpg" rel="external nofollow" >
</div>
可以看到{{model.imgUrl}}
會(huì)以字符串的形式綁定到src
屬性上。
在開(kāi)發(fā)過(guò)程中我們經(jīng)常會(huì)根據(jù)某個(gè)值判斷是否給某個(gè)標(biāo)簽增加CSS類(lèi),或者根據(jù)某個(gè)值決定按鈕是否可用等等……那么ember是怎么做的呢??
比如下面的代碼演示的是checkbox
按鈕根據(jù)綁定的屬性isEnable
的值決定是否可用。
{{! 當(dāng)isEnable為true時(shí)候,disabled為true,不可用;否則可用}}
<input type='checkbox' disabled={{model.isEnable}}>
如果在route
里設(shè)置的值是true
那么渲染之后的HTML如下:
<input type="checkbox" disabled="">
否則
<input type="checkbox">
默認(rèn)情況下,ember不會(huì)綁定到data-xxx
這一類(lèi)屬性上。比如下面的綁定結(jié)果就得不到你的預(yù)期。
{{! 綁定到data-xxx這種屬性需要特殊設(shè)置}}
{{#link-to 'photo' data-toggle='dropdown'}} link-to {{/link-to}}
{{input type='text' data-toggle='tooltip' data-placement='bottom' title="Name"}}
模板渲染之后得到下面的HTML代碼
<a id="ember455" href="/binding-element-attributes" class="ember-view active"> link-to </a>
<input id="ember470" title="Name" type="text" class="ember-view ember-text-field">
可以看到data-xxx
的屬性都不見(jiàn)了?。。‖F(xiàn)在很多的前端框架都會(huì)用到data-xxx
這個(gè)屬性,比如bootstrap
。那怎么辦呢……你可以在view中指定對(duì)應(yīng)的渲染組件Ember.LinkComponent
和Ember.TextField
(個(gè)人理解的)。
執(zhí)行命令得到view文件:
ember generate view binding-element-attributes
,
在view中手動(dòng)綁定,如下:
// app/views/binding-element-attributes.js
import Ember from 'ember';
export default Ember.View.extend({
});
// 下面是官方給的代碼,但很明顯看出來(lái)這種使用方式不是2.0版本的??!
// 2.0版本的寫(xiě)法還在學(xué)習(xí)中,后續(xù)在補(bǔ)上,現(xiàn)在為了演示模板效果暫時(shí)這么寫(xiě)!畢竟本文的重點(diǎn)還是在模板屬性的綁定上
// 綁定input
Ember.TextField.reopen({
attributeBindings: ['data-toggle', 'data-placement']
});
// // 綁定link-to
Ember.LinkComponent.reopen({
attributeBindings: ['data-toggle']
});
渲染之后得到的結(jié)果符合預(yù)期。得到如下HTML代碼
<a id="ember398" href="/binding-element-attributes" data-toggle="dropdown" class="ember-view active">link-to</a>
<input id="ember414" title="Name" type="text" data-toggle="tooltip" data-placement="bottom" class="ember-view ember-text-field">
可以看到data-xxx
的屬性正常渲染到HTML上了。
本文介紹了幾個(gè)常用的屬性綁定方式,非常之實(shí)用!但是有點(diǎn)遺憾本人能力有限還沒(méi)理解到最后一個(gè)實(shí)例在Ember2.0
版中是怎么使用的,現(xiàn)在的代碼是根據(jù)個(gè)人理解把指定組件的代碼放在view,官方教程給的也不是Ember2.0
版的,所以binding-element-attributes.js
這個(gè)文件的代碼有點(diǎn)奇葩了……希望讀者們不吝賜教!
博文完整代碼放在Github(博文經(jīng)過(guò)多次修改,博文上的代碼與github代碼可能又出入,不過(guò)影響不大?。绻阌X(jué)得博文對(duì)你有點(diǎn)用,請(qǐng)?jiān)趃ithub項(xiàng)目上給我點(diǎn)個(gè)star
吧。您的肯定對(duì)我來(lái)說(shuō)是最大的動(dòng)力??!
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話(huà):173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: