Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 主干视图将模板分配给el_Javascript_Backbone.js_Coffeescript - Fatal编程技术网

Javascript 主干视图将模板分配给el

Javascript 主干视图将模板分配给el,javascript,backbone.js,coffeescript,Javascript,Backbone.js,Coffeescript,将@template()分配给@el是否可以,如下所示: render: -> @setElement(@template()) @ someview.js.coffee class SomeView extends Backbone.View template: JST["app/templates/sometemplate"] events: 'click' : 'onClick' initialize: -> render: ->

将@template()分配给@el是否可以,如下所示:

render: ->
  @setElement(@template())
  @
someview.js.coffee

class SomeView extends Backbone.View
  template: JST["app/templates/sometemplate"]

  events:
    'click' : 'onClick'

  initialize: ->

  render: ->
    @el = @template()

  onClick: ->
    #do something
class IndexView extends Backbone.View
  initialize: ->
    @collection.on('reset', @render, this)

  render: ->
    $(@el).html('')
    for m in @collection.models
      view = new App.Views.SomeView(model: m)
      $(@el).append(view.render().el)
咖啡

class SomeView extends Backbone.View
  template: JST["app/templates/sometemplate"]

  events:
    'click' : 'onClick'

  initialize: ->

  render: ->
    @el = @template()

  onClick: ->
    #do something
class IndexView extends Backbone.View
  initialize: ->
    @collection.on('reset', @render, this)

  render: ->
    $(@el).html('')
    for m in @collection.models
      view = new App.Views.SomeView(model: m)
      $(@el).append(view.render().el)
sometemplate.jst.hamlc

.someview_template
  .stuff_inside
在我所处的情况下,SomeView类被一个div包装,这使我丢失了直接分配给“.SomeView\u template”元素的click事件。我认为解决这个问题的方法是重置@el=@template()。。。这是可能的还是正确的方法

是否主干.View的@el应该始终是包含的div,而模板应该仅是该div中包含的元素?如果@el被自动设置为@template()中的根节点,似乎会更基本。我是否应该让sometemplate.jst.hamlc只包含“.stuff_inside”,然后在SomeView集合$(@el).addClass('SomeView_template')中,这样我就可以确保事件被分配给该元素了


谢谢

不,这不好,有几个原因:

  • 您将丢失
    @el
    上的事件绑定,因此所有事件都无法工作
  • 缓存的
    @$el
    将不再匹配
    @el
  • 如果要更换
    @el
    ,请使用:

    setElement
    view.setElement(element)

    如果要将主干视图应用于不同的DOM元素,请使用setElement,它还将创建缓存的
    $el
    引用,并将视图的委派事件从旧元素移动到新元素

    你可能想要更像这样的东西:

    render: ->
      @setElement(@template())
      @
    

    不,这不好,有几个原因:

  • 您将丢失
    @el
    上的事件绑定,因此所有事件都无法工作
  • 缓存的
    @$el
    将不再匹配
    @el
  • 如果要更换
    @el
    ,请使用:

    setElement
    view.setElement(element)

    如果要将主干视图应用于不同的DOM元素,请使用setElement,它还将创建缓存的
    $el
    引用,并将视图的委派事件从旧元素移动到新元素

    你可能想要更像这样的东西:

    render: ->
      @setElement(@template())
      @
    

    好的,我应该使用@setElement。如果你不介意的话,我也更新了我的帖子。这只是一个关于如何从一开始就进行设置的一般性问题,我是否应该始终假定我的主干.View将是根节点,而模板应该是其中包含的节点?还是只使用@setElement(@template())设置整个标记更好?@kurtybot:通常的模式是将
    @el
    作为一个容器,然后
    render
    将内容放入该容器中。我认为
    @setElement
    主要用于特殊情况。您可以使用定义
    @el
    。模板通常只包含
    @el
    的内容。是的,从现在开始我将这样做。只需将Backbone.View本身作为根节点,并将模板作为该根节点内的内容即可。好的,因此我应该使用@setElement来实现这一点。如果你不介意的话,我也更新了我的帖子。这只是一个关于如何从一开始就进行设置的一般性问题,我是否应该始终假定我的主干.View将是根节点,而模板应该是其中包含的节点?还是只使用@setElement(@template())设置整个标记更好?@kurtybot:通常的模式是将
    @el
    作为一个容器,然后
    render
    将内容放入该容器中。我认为
    @setElement
    主要用于特殊情况。您可以使用定义
    @el
    。模板通常只包含
    @el
    的内容。是的,从现在开始我将这样做。只需将Backbone.View本身作为根节点,并将模板作为该根节点中的内容即可。