通常の使い方では、 link_to_add
というformメソッドで表示されるaタグで要素を追加しますが、
今回私が実装したパターンは、canvasをクリックした座標をnested_formの要素を追加し、その要素に座標をprefillする、というものです。
調べた感じだと、link_to_addメソッドはblueprintなどをふくむDOM構造に依存したイベントで動いているため、link_to_add
が内部で使っているjavascriptのメソッドを使ってきれいに実装することはできませんでした。
従って、基本的な実装方針は、canvasのクリックイベントハンドラーで、グローバルなストアに座標を書き込み、 nested:fieldAdded
イベントで、グローバルなストアから座標を読み取る、という外部を中継する実装にしました。
function handleClick(e) {
[...]
var linkToAdd = $('[data-blueprint-id="connectors_fields_blueprint"]')
linkToAdd.data('tmp-x', Math.floor(mouseX));
linkToAdd.data('tmp-y', Math.floor(mouseY));
linkToAdd.click();
}
$(document).on('nested:fieldAdded:connectors', function(event){
var linkToAdd = $('[data-blueprint-id="connectors_fields_blueprint"]')
event.field.find('input[data-x]').val(linkToAdd.data('tmp-x')) && linkToAdd.data('tmp-x', null);
event.field.find('input[data-y]').val(linkToAdd.data('tmp-y')) && linkToAdd.data('tmp-y', null);
[...]
もっとよい方法を知っていればおしえてください。
おわり