gpt4 book ai didi

javascript - Backbone View 将模板分配给 el

转载 作者:行者123 更新时间:2023-11-30 08:58:05 25 4
gpt4 key购买 nike

像这样将@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.咖啡

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”元素的点击事件。我想解决这个问题的方法是重置@el = @template()...这是可能的还是正确的方法?

是不是Backbone.View的@el应该一直是包含的div,而模板应该只是那个div中包含的元素?如果将 @el 自动设置为在 @template() 中找到的根节点,似乎会更基本。我是否应该只让 sometemplate.jst.hamlc 仅包含“.stuff_inside”,然后在 SomeView 中设置 $(@el).addClass('someview_template'),这样我就可以确定事件已分配给该元素?

谢谢!

最佳答案

不,出于以下几个原因,这是不行的:

  1. 您将丢失 @el 上的事件绑定(bind),因此您的所有事件都将无效。
  2. 缓存的 @$el 将不再匹配 @el

如果你想替换@el,使用@setElement :

setElement view.setElement(element)

If you'd like to apply a Backbone view to a different DOM element, use setElement, which will also create the cached $el reference and move the view's delegated events from the old element to the new one.

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

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

关于javascript - Backbone View 将模板分配给 el,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11694012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com