LoginSignup
0
0

More than 3 years have passed since last update.

nested_formでf.link_to_add以外をクリックしprefillした要素を追加する

Posted at

通常の使い方では、 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);
[...]

もっとよい方法を知っていればおしえてください。

おわり

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0