0

backbone.js を使用する Rails アプリケーションで jQuery UI を使用しています。ドラッグ可能な要素を作りたいですか? この関数をどこに置く必要がありますか:

$('.area-tools').draggable({handle: ".grap-area", "containment" : "parent"})

それはビューにありますか?レンダリング機能の後?初期化関数が要素を見つけられないため、DOM がまだ作成されていないと思いますか?

だから、私はこれをしました:

class Myapp.Views.Tools extends Backbone.View
  template: JST['pdfs/tools']

  tagName: "div"

  className: "pdf-tools"

  events:
    'click div.rect' : 'drawRect'

  initialize: ->
    @previewWrapper = $('.preview')
    @count = 0;
    @

  render: ->
    $(@el).html(@template())

    @initColorPicker()

    this

  initColorPicker: ->
    $('.area-tools').draggable({handle: ".grap-area", "containment" : "parent"})


  drawRect: (event) =>
    newElement = $('<div id="resizable" class="resizable"><div class="close">x</div><input type="text" name="text_' + @count++ + '" /></div>');
    @previewWrapper.append(newElement);
    newElement.draggable().resizable();

いいですか?推奨事項はありますか?

4

2 に答える 2

1

timeagoプラグインを rails/backbone.js アプリに統合するときに、同じ問題が発生しました。

私のソリューションは、プラグインをドキュメント全体に適用するのではなく、ビュー要素だけに適用することを除いて、あなたのものとほぼ同じでした。つまりthis、セレクターの前に a を追加します。

initColorPicker: ->
  @.$('.area-tools').draggable({handle: ".grap-area", "containment" : "parent"})

これにより、プラグインで行っていることの範囲が、プラグインを呼び出す特定のビューに限定されます。これは重要です。

于 2012-08-22T06:45:17.303 に答える
0

ビューがDomにアタッチされていない限り、コードは機能しないという分析は正しいです。現在、複数のオプションがあります。

  1. eventsオプションを使用して、イベント処理をビューに移動します。次に、イベント ハンドラーをビューにアタッチすることもお勧めします。
  2. el オプションを使用して、作成中にビューを dom にアタッチします。この投稿、特に「ビューを他の DOM 要素から切り離す」のセクションを読んでください。
  3. shioyama の推奨に従って、問題を解決する 3 番目のオプションです。

これら3つすべてで問題が解決するはずです。ただし、3 つすべてがベスト プラクティスであるため、3 つすべてを適用することをお勧めします。

于 2012-08-22T06:50:51.670 に答える