ノード操作
このセクションでは、ノード操作をリッスンし、インターセプトする方法について説明し、同時にプログラムでノードを操作する方法も紹介します。
ノード操作の購読
マインドマップ上のユーザー操作に購読して、操作イベントをリッスンすることができます。これは DOM イベントをリッスンするのと同じくらい簡単です。
mind.bus.addListener('operation', (operation) => {
console.log(operation)
// return {
// name: アクション名,
// obj: 対象オブジェクト
// }
// name: [insertSibling|addChild|removeNode|beginEdit|finishEdit]
// obj: 対象
// name: moveNode
// obj: {from:target1,to:target2}
})
mind.bus.addListener('selectNode', (node) => {
console.log(node)
})
mind.bus.addListener('expandNode', (node) => {
console.log('expandNode: ', node)
})
最も一般的に使用されるイベントは operation
イベントで、これにはすべてのノード操作が含まれます。
ノード操作ガード
その名の通り、ノード操作ガードは特定のノード操作の挙動をインターセプトできます。
構成で before
オブジェクトを設定し、プロパティ名はノード操作に対応し、値はブール値(または Promise で包まれたブール値)を返す関数です。
let mind = new MindElixir({
// ...
before: {
insertSibling(el, obj) {
console.log(el, obj)
if (this.currentNode.nodeObj.parent.root) {
return false
}
return true
},
async addChild(el, obj) {
await sleep()
if (this.currentNode.nodeObj.parent.root) {
return false
}
return true
},
},
})
async
を使用することで、非同期情報が必要な場合に進行するかどうかを決定できるようになります。