MVCを完全に取得していないだけかどうかはわかりませんが、ポップアップの詳細を含むビューモデルオブジェクトを設定するだけで、現在設定されている場合はビューを生成するときに、ポップアップを含むdivにデータを入力します。CSS は外観と配置を制御します。
したがって、基本的には、現在のアプリケーションの状態に基づいてビューを条件付きで構築するために、Mithril のトップダウンの再レンダリング アプローチに依存しています。
私は実際にポップアップ確認オブジェクトのリストを使用したので、複数の確認がキューに入る可能性があります。
コントローラーで、確認キューを作成します。
function Controller() {
...
this.confirmation =[];
...
}
ビューで、確認がキューに入れられている場合は確認ビューを作成し、div
それ以外の場合は空のプレースホルダーを作成します (コンテナ要素が表示されず、レンダリングごとに消える場合、ミスリルの差分が最適に機能します)。
function crtView(ctl) {
...
return m("div", [
...
crtConfirmationView(ctl),
...
]);
}
function crtConfirmationView(ctl) {
var cfm=ctl.confirmation[0];
return m("div#popup-confirm",(cfm ? muiConfirm.crtView(ctl,cfm.title,cfm.body,cfm.buttons) : null));
}
次に、確認が必要なときはいつでも、確認オブジェクトをキューにプッシュし、Mithril の描画システムを実行してビューを再構築します。
function deleteRecord(ctl,evt,row,idx,rcd) {
var cfm={
title : m("span","Delete Customer: "+rcd.ContactName),
body : [
m("p","Do you really want to delete customer "+rcd.CustomerId+" ("+rcd.ContactName+") and all associated appointments and addresses?"),
m("p.warning", "This action cannot be undone. If this is a duplicate customer, it should be merged with the other record."),
],
buttons : deleteButtons,
proceed : "delete",
index : idx,
record : rcd,
};
ctl.confirmation.push(cfm);
}
確認オブジェクトには、confirm
ヘルパー関数crtView
が確認ビューを作成し、ユーザーがボタンをクリックしたとき (または ENTER や ESCAPE などを押したとき) にアクションを実行するために必要なすべてのプロパティが含まれています。
注: 配列インデックスについて質問がある場合に備えて、データ モデル内のレコードを識別するために配列インデックスを使用することから離れました (削除が完了したら、配列要素を削除する必要があります)。代わりに、データベース ID を使用して影響を受けるレコードを見つけます。これは、リストの並べ替えなど、モデル内の変更が介在することに対して回復力があります。