私は、独自のモーダル機能(see here)を持っているsemantic-uiを使用しています。 Aureliaでこの特定の機能を活用するコードをすべて書くのではなく、aurelia-dialogプラグインのレンダリングパイプラインにフックする方法があるので、aurelia-dialogプラグインを使用してsemantic-uiを使用できますか?ブートストラップ、セマンティック、または他のuiキットでaurelia-dialogを使用
答えて
はい、あります。
Aurelia-dialogには抽象的なRendererインタフェースがあり、レンダラとのインタフェースに使用します。デフォルトでは、それが提供してレンダラを使用しますが、あなたはそうのように、ダイアログのプラグインを設定することによって、これをオーバーライドすることができます:MyRenderer
はabstract Renderer interface使用
import {MyRenderer} from './my-renderer';
aurelia.use.plugin('aurelia-dialog', (config) => {
config.useRenderer(MyRenderer);
});
を...。レンダラでは、getDialogContainer
,showDialog
、およびhideDialog
の3つのメソッドを実装する必要があります。
showDialog
関数では、showDialog
とhideDialog
のメソッドを作成し、それらを引数として渡されるdialogControllerにアタッチする必要があります。これにより、dialogControllerがプログラムでダイアログを閉じることができます。
レンダラーを実装して登録したら、ダイアログプラグインは選択したUIツールキットを使用します。お役に立てれば。
これは意味論的なモーダルのための私の解決策です(TypeScriptの中で)、それはaurelia-dialogを使用しません。
ビュー(/ui/dialogs/dialog-confirm.html):
<template>
<div class="ui modal small" ref="dialogElement">
<div class="header">${model.headerText}</div>
<div class="content">
<p>${model.messageText}</p>
</div>
<div class="actions">
<div class="ui approve button">${model.confirmText?model.confirmText:'OK'}</div>
<div class="ui cancel button">${model.cancelText?model.cancelText:'Cancel'}</div>
</div>
</div>
</template>
ビューモデル(/ui/dialogs/dialog-confirm.ts):
export class Dialog {
model;
done;
result;
dialogElement:HTMLElement;
activate(data) {
if(data){
this.model = data.model;
this.done = data.done;
this.result = false;
}
}
bind(){
$(this.dialogElement)
.modal({
onApprove :()=>{ this.result = true; },
onDeny :()=>{ this.result = false; },
onHide :()=>{ this.done(this.result); }
})
.modal('show');
}
}
ダイアログクラス(/ui/dialogs/dialog.ts):
import { inject } from 'aurelia-framework';
import { EventAggregator } from 'aurelia-event-aggregator';
@inject(EventAggregator)
export class Dialog {
constructor(private eventAggregator) {
}
show(viewName: string, model) {
return new Promise((resolve, reject) => {
this.eventAggregator.publish('showDialog', {
viewName: viewName,
model: model,
resolve: resolve
});
});
}
}
...あなたのアプリケーションクラスにEventAggregatorを注入し、添付()フックにこれを追加します。
attached() {
this.eventAggregator.subscribe('showDialog', (event) => {
console.assert(!this.dialogData, "Only one dialog can be shown at any time.");
event.done = (result) => {
event.resolve(result);
this.dialogData = null;
}
this.dialogName = event.viewName;
this.dialogData = event;
});
}
...最終的にあなたのapp.htmlにこれを追加します。
this.dialog.show('dialog-confirm',{
headerText:'Warning!',
messageText:'When you delete stuff - it is lost',
confirmText:'Delete',
cancelText:'I better not...'
}).then(function(result){
console.log('The result is: '+result)
});
:
<compose if.bind="dialogData" view-model="./ui/dialogs/${dialogName}" model.bind="dialogData" view="./ui/dialogs/${dialogName}.html">
</compose>
使い方は、あなたが最初の引数としてすべてのモデルビュー/ビューペアの名前を付けることができます
babelで解決策が必要です!:) – Reft
型(:HTMLElement)を削除し、DialogでeventAggregatorインジェクションを更新するだけです –
- 1. Html.BeginFormとセマンティックUIの使用
- 2. セマンティックUIを使用したフルスクリーンマップ
- 3. ブートストラップ4とセマンティックUIを併用することはできますか?
- 4. asp.net webformsでセマンティックUIを使用する
- 5. セマンティックUIでReduxフォームを使用する
- 6. セマンティックUI - セマンティックUIドロップダウンメニュー内のリンク/タグ/ URL
- 7. セマンティックUIは
- 8. NPMは、私はセマンティックUIをインストールすることができませんセマンティックUI
- 9. HTML Web UIキット
- 10. リアクションのセマンティックUI
- 11. セマンティックUI in .gitignore
- 12. 高さ:セマンティック-UI
- 13. セマンティックUIグリッドクラス
- 14. セマンティックUIコンテナセグメント
- 15. セマンティックui with select2
- 16. セマンティックUIドロップダウンログインフォーム
- 17. セマンティックUIイベント
- 18. ブートストラップベースのプロジェクトでセマンティックUI要素を使用する
- 19. セマンティックUIのモーダルでTinyMCEを使用する
- 20. セマンティックUIドロップダウンメニューのインラインアイテム
- 21. セマンティックUIのドロップダウン幅
- 22. ブートストラップ4またはBoootstrap UI?
- 23. UIキット通知の問題
- 24. セマンティックUI検索カスタムデータソース
- 25. セマンティックUI全角メニュードロップダウン
- 26. セマンティックUI - オートコンプリート検索
- 27. セマンティックUIグリッド:私は行あたりの列の「奇数」番号のセマンティックUIグリッドを有する
- 28. セマンティックUIのドロップダウンアイコンのみ?
- 29. セマンティックuiドロップダウンメニューコンポーネント内の反応コンポーネントの条件の使用方法
- 30. セマンティックUIのカルーセルが利用できません
これはプラグインに追加した部分の1つですか? –
@MatthewJamesDavisはい。ちょっと戻って、実際にはプルリクエストが見つかりました[ここ](https://github.com/aurelia/dialog/pull/120)。 –
答えにレンダラーを実装する方法を実演できますか? –