ホームページ >ウェブフロントエンド >jsチュートリアル >aurelia.ioの方法を拡張します
面白いページの各投稿にポップオーバーを提供するリクエストを受け取ると想像してください。それを行うために、必要なデータ属性を配置することにより、Bootstrapの機能をMarkupに直接簡単に配線できます。しかし、他のページでも突然それを行う必要がある場合はどうでしょうか?カスタム属性を宣言することで機能を提供することで、私たちの生活をずっと楽にすることができます。これらは、次のシナリオに特に役立ちます:
ポップオーバーの作成
<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>それを実現するために、PopOver.jsというSRCフォルダーに新しいJavaScriptファイルを作成することから始めます。カスタム属性は、他のすべてのAureliaコンストラクトと同様に、事前定義されたAPIに渡される関数のコレクションではなく、単純なエクスポートされたES6クラスです(多くのレガシーフレームワークが行うように)。
他のフレームワークと比較して、Aureliaはメタデータを介してそれらを記述することにより、構造を宣言します。しかし、静的関数や複雑なAPIを使用する代わりに、Aureliaは最先端のES7デコレータを活用してそれを実現します。パッケージAurelia-Frameworkから必要なデコレーターをインポートします。コントロール自体については、Twitter Bootstrapが提供するPopover JavaScriptコントロールを使用します。そのため、bootstrapsのJavaScriptコードを初期化するために、jQueryハンドル$とブートストラップをインポートします。
<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がファイルをロードしたときに何が得られるかを知っていることです。 CustomAttributeデコレータを接続することにより、指定された値でコンポーネントに名前を付けます。一方、バインド可能なデコレーターは、私たちの見解が拘束できるプロパティを宣言しています。利用可能なプロパティごとにこのデコレーターを繰り返すだけです。
最初の注射デコレータは、実際の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>
これで、Bindと呼ばれる方法を宣言することにより、行動のライフサイクルを選択できるすべての必要な情報が得られました。これにより、jQueryの対応方法に匹敵する適切なタイミングでコンポーネントを初期化することができます。
<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>
最後になりましたが、変更されたハンドラーを追加します。バインディングソースは時間とともに変化していないため、これらは実際には例では実行されていないことに注意してください。
<span>import <span>{customAttribute, bindable, inject}</span> from 'aurelia-framework'; </span><span>import $ from 'bootstrap'; </span><span>import bootstrap from 'bootstrap'; </span><span>...</span>
githubの完全なファイルを表示
既存の要素に属性を提供することで新機能を追加する方法がわかりました。先に進んで、独自のカスタム要素を書き始めましょう。
カスタム要素を使用して新しいタグを作成します
@<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>ご覧のとおり、新しいタグを使用し、データバインディングを介してデータプロパティを介して必要な情報を提供します。
次のステップは、実際の要素を作成することです。フォルダーSRCに、要素のビューReddit-gif.htmlとそのVM Reddit-gif.jsを作成することにより、それを行います。次に見られるビューは、gifs.htmlからの以前のマークアップを活用し、実際のビデオを埋め込むために使用されるiframeを切り替えるボタンを追加することです。繰り返しになりますが、Aureliaのビューはテンプレートタグに包まれています:
VMパーツを見ると、カスタム属性を作成するときと同様のプロセスに従います。しかし、今回は別のデコレーターを活用して、Aureliaに、データという名前の1つのプロパティのみを使用してCustomElementを作成することを伝えます。
<span>constructor(element) { </span> <span>this.element = element; </span><span>}</span>
次に、iFrameを表示するかどうかを追跡するために、Gifactiveメンバーを定義しています。また、IFRAMEが見えない場合はコンテンツを事前にロードしないように、最初にGIFSRCメンバーを空にするように設定します。
<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>ここで完全なHTMLファイルとJSファイルをこちらで表示できます
コードの量を規則で減らす
<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>
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>
見るべきもう1つのことは、複数のプロパティの使用を短縮する方法です。したがって、それぞれを1つずつ定義する代わりに、動的特性を期待するようにカスタム属性に伝えることもできます。そのために、Dynamicoptionsデコレーターでクラスを飾ります。これで、同じビューマークアップを再利用できますが、名前が示すように、動的なコンテキストでは非常に役立つすべてのプロパティ宣言を手動で定義する必要はありません。これは、DynamicPropertyChangedと呼ばれる1つの一般的な変更ハンドラーを書くことができることを意味します。これは、バウンドプロパティが変更されるたびに呼び出されます。
<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>しかし、カスタム要素はどうですか?さて、私たちはそれを認識することさえせずに、すでにいくつかの慣習を暗黙的に使用しています。システムは、同じ名前を持っているだけで、ビューとVMペアを自動的にまとめました。別のビューを使用する必要がある場合は、Decorator @useview(RecativePath)を使用できます。または、@noviewを宣言してビューをまったく使用しないでください。デコレーターのUseshadowdomを追加することで、狂って、Shadowdomに見方をレンダリングすることもできます。その用語に慣れていない場合は、この記事をご覧ください
結論
でHTMLを拡張することに関するよくある質問(FAQ)
aurelia.ioは、Web標準、シンプルさ、および拡張性に焦点を当てているため、他のJavaScriptフレームワークから際立っています。多くのフレームワークとは異なり、aurelia.ioはコラボレーションライブラリのコレクションになるように設計されています。つまり、必要なだけフレームワークを使用できます。また、コンベンションベースのクリーンなコーディングを強調し、必要なボイラープレートコードの量を減らします。さらに、Aurelia.ioのWeb標準に従うことへのコミットメントは、コードが今後のWebテクノロジーと将来のプルーフで互換性があることを意味します。 Aurelia.ioのカスタム要素には、要素のクラスとそのHTML表現のビューを定義することが含まれます。クラスには要素のロジックが含まれ、ビューはそのHTML構造を定義します。定義されると、カスタム要素は、標準のHTML要素と同様に、Aurelia.ioアプリケーションで使用できます。これにより、コードの再利用とモジュラー設計が可能になり、アプリケーションが開発と維持を容易にします。 IOは、既存のHTML要素にカスタム動作を追加する方法です。これらは、属性のロジックのクラスとHTML表現のビューを使用して、カスタム要素と同様の方法で定義されています。定義されると、カスタム属性はAurelia.ioアプリケーションのHTML要素に追加でき、まったく新しい要素を作成する必要なく機能を拡張できます。 aurelia.ioの学習曲線は、簡単に学習できるように設計されています。 JavaScriptとHTMLに精通している場合は、Aurelia.ioをすばやく拾うことができるはずです。フレームワークのドキュメントは包括的であり、開始するのに役立つ多くの例が含まれています。信頼性とパフォーマンス。ユニットテスト、統合テスト、エンドツーエンドテストの組み合わせを使用して、フレームワークのすべての側面をカバーします。パフォーマンスの観点から、Aurelia.ioは、最小限のフットプリントと最適化されたレンダリングを備えた高速で効率的になるように設計されています。 IOには、フレームワークに貢献し、お互いにサポートを提供する活気に満ちた活発な開発者のコミュニティがあります。コミュニティフォーラム、ギターチャットルーム、スタックオーバーフロータグなど、多くのリソースが利用可能です。さらに、Aurelia.ioチームは専門的なサポートとトレーニングサービスを提供しています。aurelia.ioは、Web、モバイル、およびデスクトップ開発のための最新のオープンソースJavaScriptフレームワークです。開発者がカスタムHTML要素を作成し、既存のHTML要素にカスタム属性を追加し、HTMLレンダリングのフローを制御できるようにすることにより、HTMLを拡張します。これは、Aureliaの強力なテンプレートエンジンを通じて達成されます。これにより、カスタム要素と属性を解釈し、標準のHTMLとしてレンダリングします。これにより、クリーンで読みやすいコードを維持しながら、よりダイナミックでインタラクティブで複雑なWebアプリケーションが可能になります。
aurelia.ioは、他のJavaScriptフレームワークと比較していますか?
aurelia.io?
以上がaurelia.ioの方法を拡張しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。