在Backbone.js中使用jQuery插件的最佳实践是什么

在Backbone.js中使用jQuery插件的最佳实践是什么,backbone.js,Backbone.js,我正在使用jQuery UI和使用backbone.js的rails应用程序。我想做一个可拖动的元素?我必须将此函数放在何处: $('.area-tools').draggable({handle: ".grap-area", "containment" : "parent"}) 它在观景台上吗?在渲染函数之后?因为initialize函数没有找到我的元素,我想DOM还没有创建 所以,我这样做了: class Myapp.Views.Tools extends Backbone.View

我正在使用jQuery UI和使用backbone.js的rails应用程序。我想做一个可拖动的元素?我必须将此函数放在何处:

$('.area-tools').draggable({handle: ".grap-area", "containment" : "parent"})
它在观景台上吗?在渲染函数之后?因为initialize函数没有找到我的元素,我想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();
类Myapp.Views.Tools扩展主干.View
模板:JST['PDF/tools']
标记名:“div”
类名:“pdf工具”
活动:
'单击div.rect':'drawRect'
初始化:->
@PreviewRapper=$('.preview')
@计数=0;
@
渲染:->
$(@el).html(@template())
@initColorPicker()
这
initColorPicker:->
$('.area tools').draggable({handle:.grap area”,“containment:“parent”})
drawRect:(事件)=>
新元素=$('x');
@previewRapper.append(新元素);
newElement.draggable().resizeable();

好吗?有什么建议吗

在将插件集成到rails/backbone.js应用程序时,我遇到了同样的问题

我的解决方案与您的几乎相同,只是没有将插件应用于整个文档,而是将其应用于视图元素。i、 e.在选择器前添加一个

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

这将使您对插件所做的操作范围限制在您调用插件的特定视图中,这一点很重要。

您的分析是正确的,您的代码将无法工作,除非您的视图附加到Dom。您现在有多个选项:

  • 通过选项将事件处理移动到视图中。然后,我还建议将事件处理程序附加到视图中
  • 在创建过程中通过将视图附加到dom。阅读本文,尤其是“将视图与其他DOM元素解耦”一节
  • 按照shioyama的建议,这是解决问题的第三种选择
  • 这三种方法都可以解决你的问题。但是这三个都是最佳实践,所以您可能希望应用这三个