通過查看視圖,我們可以看到數據採集以及渲染與一個VM/視圖對緊密耦合。
>
想像一下,我們得到了為每個有趣的頁面帖子提供彈出窗口的請求。為此,我們可以通過放置必要的數據屬性,然後在我們的Funnyvm內部進行初始化,從而輕鬆地將Bootstrap的功能直接連接到標記中。但是,如果我們也需要在另一頁上突然進行操作怎麼辦?通過聲明自定義屬性來提供功能可以使我們的生活更加輕鬆。這些在以下方案中特別有用:
>現在讓我們弄髒雙手,看看構建我們的第一個自定義屬性所需的內容。
>讓我們從頭開始看看我們要實現的目標。新屬性彈出案應接受彈出窗口的位置,標題和內容的參數。放置位於右側,因此一個簡單的字符串,因為值就足夠了。對於其他兩個屬性,我們將使用Aurelia的數據綁定來映射迭代值。為了加載文件,我們使用Aurelia的需求功能。來自屬性包含要導入資源的相對路徑。
<span><span><span><template</span>></span> </span> <span><span><span><ul</span> class<span>="list-group"</span>></span> </span> <span><span><span><li</span> class<span>="list-group-item"</span> repeat.for<span>="p of posts"</span>></span> </span> <span><span><span><img</span> src.bind<span>="p.data.thumbnail"</span> /></span> </span> <span><span><span><a</span> href<span>="http://reddit.com${p.data.permalink}"</span>></span> </span> ${p.data.title} <span><span><span></a</span>></span> </span> <span><span><span></li</span>></span> </span> <span><span><span></ul</span>></span> </span><span><span><span></template</span>></span></span>
與其他框架相比,Aurelia通過通過元數據描述了構建體。但是,Aurelia不使用靜態功能或複雜的API,而是利用了前沿ES7裝飾器來實現這一目標。我們將從Aurelia-Framework包裝中導入必要的裝飾器。至於控件本身,我們將使用Twitter Bootstrap提供的彈出式JavaScript控件。因此,我們導入jQuery hander $和Bootstrap,以便初始化引導程序的JavaScript代碼。
<span><span><span><require</span> from<span>="./popover"</span>></span><span><span></require</span>></span> </span>... <span><span><span><img</span> src.bind<span>="p.data.thumbnail"</span> </span></span><span> <span>popover<span>="placement: 'right'; </span></span></span><span><span> title.bind: p.data.url; </span></span><span><span> content.bind: p.data.title<span>"</span> /></span></span>
>第一個注入裝飾器會處理實際的DOM元素作為我們構造方法的參數,然後存儲以供以後使用。
<span><span><span><template</span>></span> </span> <span><span><span><ul</span> class<span>="list-group"</span>></span> </span> <span><span><span><li</span> class<span>="list-group-item"</span> repeat.for<span>="p of posts"</span>></span> </span> <span><span><span><img</span> src.bind<span>="p.data.thumbnail"</span> /></span> </span> <span><span><span><a</span> href<span>="http://reddit.com${p.data.permalink}"</span>></span> </span> ${p.data.title} <span><span><span></a</span>></span> </span> <span><span><span></li</span>></span> </span> <span><span><span></ul</span>></span> </span><span><span><span></template</span>></span></span>
最後但並非最不重要的一點是,我們添加了更改的處理程序。請注意,在我們的示例中,這些實際上並未執行,因為綁定源不會隨著時間的流逝而變化。
<span><span><span><require</span> from<span>="./popover"</span>></span><span><span></require</span>></span> </span>... <span><span><span><img</span> src.bind<span>="p.data.thumbnail"</span> </span></span><span> <span>popover<span>="placement: 'right'; </span></span></span><span><span> title.bind: p.data.url; </span></span><span><span> content.bind: p.data.title<span>"</span> /></span></span>
在github上查看完整的文件
<span>import <span>{customAttribute, bindable, inject}</span> from 'aurelia-framework'; </span><span>import $ from 'bootstrap'; </span><span>import bootstrap from 'bootstrap'; </span><span>...</span>
>現在我們已經看到瞭如何通過向現有元素提供屬性來添加新功能,讓我們繼續並開始編寫自己的自定義元素。
>>創建具有自定義元素的新標籤
為了創建全新的元素,Aurelia利用了一種非常相似的方法來定制屬性。例如,我們將重新構建GIF頁面的帖子,該帖子由稱為Reddit-GIF的自定義元素表示,並提供了打開實際視頻的可能性。我們認為的結果標記應該是:您可以看到,我們使用了新標籤,並通過數據綁定到數據屬性提供必要的信息。
@<span>inject(Element) </span>@<span>customAttribute('popover') </span>@<span>bindable('title') </span>@<span>bindable('content') </span>@<span>bindable('placement') </span><span>export class Popover { </span><span>...</span>
>查看VM部分,我們確實遵循與創建自定義屬性時相似的過程。但是這一次,我們利用了一個不同的裝飾儀,該裝飾器將告訴Aurelia我們將僅使用一個名為Data的屬性來創建一個自定義元素。
。
<span>constructor(element) { </span> <span>this.element = element; </span><span>}</span>
<span>bind() { </span> <span>// initialize the popover </span> <span>$(this.element).popover({ </span> <span>title: this.title, </span> <span>placement: this.placement, </span> <span>content: this.content, </span> <span>trigger: 'hover' }); </span><span>}</span>
<span>titleChanged(newValue){ </span> <span>$(this.element).data('bs.popover').options.title = newValue; </span><span>} </span> <span>contentChanged(newValue){ </span> <span>$(this.element).data('bs.popover').options.content = newValue; </span><span>} </span> <span>placementChanged(newValue){ </span> <span>$(this.element).data('bs.popover').options.placement = newValue; </span><span>}</span>
用約定的代碼數量
降低代碼量 Aurelia<span><span><span><require</span> from<span>="./reddit-gif"</span>></span><span><span></require</span>></span> </span>... <span><span><span><ul</span> class<span>="list-group"</span>></span> </span> <span><span><span><li</span> class<span>="list-group-item"</span> repeat.for<span>="p of posts"</span>></span> </span> <span><span><span><reddit-gif</span> data.bind<span>="p.data"</span>></span><span><span></reddit-gif</span>></span> </span> <span><span><span></li</span>></span> </span><span><span><span></ul</span>></span></span>
>
<span><span><span><template</span>></span> </span> <span><span><span><ul</span> class<span>="list-group"</span>></span> </span> <span><span><span><li</span> class<span>="list-group-item"</span> repeat.for<span>="p of posts"</span>></span> </span> <span><span><span><img</span> src.bind<span>="p.data.thumbnail"</span> /></span> </span> <span><span><span><a</span> href<span>="http://reddit.com${p.data.permalink}"</span>></span> </span> ${p.data.title} <span><span><span></a</span>></span> </span> <span><span><span></li</span>></span> </span> <span><span><span></ul</span>></span> </span><span><span><span></template</span>></span></span>
>要查看的另一件事是如何縮短對多個屬性的使用。因此,我們還可以告訴我們的自定義屬性可以期望動態屬性。為此,我們使用Dynamicoptions Decorator裝飾班級。現在,我們仍然可以重複使用相同的視圖標記,但不必手動定義所有屬性聲明,顧名思義,這些聲明在動態上下文中非常有幫助。這意味著我們可以編寫一個名為dynamicpropertychanged的通用更換手,每當任何綁定屬性更改時都會被調用。
<span><span><span><require</span> from<span>="./popover"</span>></span><span><span></require</span>></span> </span>... <span><span><span><img</span> src.bind<span>="p.data.thumbnail"</span> </span></span><span> <span>popover<span>="placement: 'right'; </span></span></span><span><span> title.bind: p.data.url; </span></span><span><span> content.bind: p.data.title<span>"</span> /></span></span>
結論
>
經常詢問的問題(常見問題解答)有關使用Aurelia.ioaurelia.io由於關注Web標準,簡單性和可擴展性而在其他JavaScript框架中脫穎而出。與許多框架不同,Aurelia.io被設計為合作庫的集合,這意味著您可以根據需要使用盡可能多或少的框架。它還強調了基於常規的編碼,減少了所需的樣板代碼量。此外,Aurelia.io對遵循Web標準的承諾意味著您的代碼將在未來和即將到來的Web Technologies中兼容。
中創建自定義元素? aurelia.io中的自定義元素涉及為元素定義一個類,以及其HTML表示的視圖。該類包含該元素的邏輯,而視圖定義了其HTML結構。定義後,可以像標準HTML元素一樣在任何Aurelia.io應用程序中使用自定義元素。這允許代碼重複使用和模塊化設計,使您的應用程序更易於開發和維護。
> aurelia.io如何處理數據綁定?
>我可以將Aurelia.io與其他JavaScript庫和框架一起使用嗎? .IO被設計為與其他JavaScript庫和框架兼容。它使用模塊化體系結構,這意味著您可以選擇使用框架的哪些部分。這使得將Aurelia.io集成到現有項目中變得容易,或將其他庫和框架與Aurelia.io。包括一個強大的路由器,允許複雜的導航方案。路由器支持嵌套路由,可選參數和動態路由等功能。這使得使用aurelia.io創建單頁應用程序變得容易,在該應用程序中,用戶可以在不同的視圖之間導航而無需刷新頁面。
>
> aurelia.io有哪種支持和社區? IO擁有一個充滿活力的開發人員社區,他們為框架做出了貢獻並相互支持。有許多可用的資源,包括社區論壇,吉特聊天室和堆棧溢出標籤。此外,Aurelia.io團隊還提供專業的支持和培訓服務。以上是擴展html aurelia.io方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!