繁体   English   中英

骨干视图将模板分配给el

[英]Backbone View Assign Template to el

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

someview.js.coffee

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

  events:
    'click' : 'onClick'

  initialize: ->

  render: ->
    @el = @template()

  onClick: ->
    #do something

index.js.coffee

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_template'元素上分配的click事件。 我认为可以解决此问题的方法是通过重置@el = @template()...这样做是否可行或正确的方法?

是Backbone.View的@el始终是包含div的模板,模板应该只是该div中包含的元素吗? 如果将@el自动设置为@template()中的根节点,似乎会更基础。 我是否应该只让sometemplate.jst.hamlc仅包含“ .stuff_inside”,然后在SomeView中设置$(@ el).addClass('someview_template'),这样才能确定事件是否已分配给该元素?

谢谢!

不,由于以下几个原因,这并不可行:

  1. 您将失去@el上的事件绑定,因此所有事件均不起作用。
  2. 缓存的@$el将不再与@el匹配。

如果要替换@el ,请使用@setElement

setElement view.setElement(element)

如果您想将Backbone视图应用于另一个DOM元素,请使用setElement ,它还将创建缓存的$el引用,并将视图的委托事件从旧元素移到新元素。

您可能想要更多这样的东西:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM