W3C MutationObserver API を使用して、DOM で行われている変更をブラウザーに記録させることができます (API は扱いにくいですが)。これにより、DOM に加えられたすべての特定の変更について完全な知識を得ることができます。
takeRecords
再描画後に結果をログに記録するには、メイン アプリケーションの後に接続されていない (つまり、ライブ ドキュメントに挿入されていない) コンポーネントをマウントし、Mithril のconfig
解決時にオブザーバーから空のルート ノードを取得します。このコードはその場で書かれており、テストされていませんが、アイデアが得られるはずです:
// Application code
// Mount an unattached component
// to log mutation records
m.mount(
document.createElement( 'div' ),
{
controller : function(){
return new MutationObserver( function( records ){
console.log( records )
} )
},
view : function( ctrl ){
return m( 'div', {
config : function( el, isInitialized ){
if( !isInitialized ){
ctrl.observe( el, {
attributes : true,
characterData : true,
childList : true
} )
}
}
} )
}
}
)
編集:投稿したコードは、試してみたところ機能しませんでした。作業コードを提供するために更新しました。ご覧のとおり、複雑で直感的ではなく、醜いです。私はこれを何度もやりたくなり、そのたびに MutationObserver API に苦労しました。ミューテーション レコードのリストは簡単に読めますが、オブザーバーの初期化は面倒で、常にコピーと貼り付けが必要です。そこで、これを簡単にするために小さなラッパーMutyを書きました。Muty があれば、あとはmuty( muty.options, el, records => console.log( records ) )
.