Ember 包裹內(nèi)容

2018-01-06 17:52 更新

準(zhǔn)備工作:

ember g route wrapping-content-in-component-route
ember g component wrapping-content-in-component 

有些情況下,你需要定義一個(gè)包裹其他模板提供的數(shù)據(jù)的組件。比如下面的例子:





<h2>{{title}}</h2>
<div class='body'>{{body}}</div>

上述代碼定義了一個(gè)普通的組件。





{{wrapping-content-in-component title=model.title body=model.body}}

調(diào)用組件,傳入兩個(gè)指定名稱的參數(shù),更多有關(guān)組件參數(shù)傳遞問題請(qǐng)看Ember.js 入門指南之二十九屬性傳遞。

下面在route中增加一些測(cè)試數(shù)據(jù)。

//  app/routes/wrapping-content-in-component-route.js


import Ember from 'ember';


export default Ember.Route.extend({
    model: function() {
        return { id: 1, title: 'test title', body: 'this is body ...', author: 'ubuntuvim' };
    }
});

如果程序代碼沒寫錯(cuò),界面應(yīng)該會(huì)顯示如下信息。

結(jié)果截圖

在上述例子中組件正常顯示出model回調(diào)中初始化的數(shù)據(jù)。但是如果你定義的組件需要包含自定義的HTML內(nèi)容呢??

除了上述這種簡(jiǎn)單的數(shù)據(jù)傳遞之外,Ember還支持使用block form(塊方式),換句話說(shuō)你可以直接傳遞一個(gè)模板到組件中,并在組件中使用{{yield}}助手顯示傳入進(jìn)來(lái)的模板。

為了能使用塊方式傳遞模板到組件中,在調(diào)用組件的時(shí)候必須使用#開始的方式(兩種調(diào)用方式:{{component-name}}或者{{#component-name}}……{{/component-name}}),注意一定要有關(guān)閉標(biāo)簽!

稍加改造前面的例子,這時(shí)候不只是傳遞一個(gè)簡(jiǎn)單的數(shù)據(jù),而是傳入一個(gè)包含HTML標(biāo)簽的簡(jiǎn)單模板。





<h2>{{title}}</h2>


<div class='body'>{{yield}}</div>

注意此時(shí)div標(biāo)簽內(nèi)使用的是{{yield}}助手,而不是直接使用{{body}}。

下面是調(diào)用組件的模板。





{{!wrapping-content-in-component title=model.title body=model.body}}


{{#wrapping-content-in-component title=model.title}}
    {{model.body}}
    <small>by {{model.author}}</small>
{{/wrapping-content-in-component}}

頁(yè)面加載之后效果如下:

頁(yè)面效果

查看頁(yè)面HTML源代碼,可以看到在

這個(gè)標(biāo)簽內(nèi)的內(nèi)容確實(shí)是調(diào)用組件wrapping-content-in-component傳入進(jìn)來(lái)的簡(jiǎn)單HTML模板。你可以把{{#wrapping-content-in-component}}……{{/wrapping-content-in-component}}中間的內(nèi)容當(dāng)做是一個(gè)參數(shù)理解。

頁(yè)面效果

到此組件包裹內(nèi)容的知識(shí)點(diǎn)介紹完畢,內(nèi)容很少也比較簡(jiǎn)單!如果有疑問請(qǐng)給我留言或者直接看官方教程。


博文完整代碼放在Github(博文經(jīng)過多次修改,博文上的代碼與github代碼可能有出入,不過影響不大!),如果你覺得博文對(duì)你有點(diǎn)用,請(qǐng)?jiān)趃ithub項(xiàng)目上給我點(diǎn)個(gè)star吧。您的肯定對(duì)我來(lái)說(shuō)是最大的動(dòng)力??!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)