Javascript 主干视图将模板分配给el
将@template()分配给@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: ->
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
,请使用:
setElementview.setElement(element)
如果要将主干视图应用于不同的DOM元素,请使用setElement,它还将创建缓存的$el
引用,并将视图的委派事件从旧元素移动到新元素
你可能想要更像这样的东西:
render: ->
@setElement(@template())
@
不,这不好,有几个原因:
@el
上的事件绑定,因此所有事件都无法工作@$el
将不再匹配@el
@el
,请使用:
setElementview.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本身作为根节点,并将模板作为该根节点中的内容即可。