View Backbone.js视图的模板化问题:this.el属性

View Backbone.js视图的模板化问题:this.el属性,view,rendering,backbone.js,jquery-templates,View,Rendering,Backbone.js,Jquery Templates,我正在尝试找到渲染li元素的最佳方法: 我读到我应该永远替换这个.el 因此,我似乎必须在我的LiViewrender()函数中打开模板: // replace element content with html generated from template var $rendered = $.tmpl(this.template, this.model.toJSON()); this.el.html($rendered.unwrap().html()); 我只得到$renderedli中的

我正在尝试找到渲染li元素的最佳方法:

我读到我应该永远替换
这个.el

因此,我似乎必须在我的
LiView
render()
函数中打开模板:

// replace element content with html generated from template
var $rendered = $.tmpl(this.template, this.model.toJSON());
this.el.html($rendered.unwrap().html());
我只得到
$rendered
li中的内容,因为我不应该替换它

但是我应该如何传递属性呢

我试过:

this.el.attr('class', $rendered.attr('class'));
this.el.attr('title', $rendered.attr('title'));
但它取代了属性。。。有些(比如jqueryui-draggable)可能会丢失

这一切似乎有点笨重


谢谢

我不确定我是否完全理解了你想做的事情,但无论如何,我会尝试回答你的问题:)

您有一个liView,它对应于LIDOM元素 所以您需要指定

el: "li"
模板中没有li。然后渲染的结果将是

<li>
    contents of template
</li>
如果需要向根(li)元素添加其他属性

如果这对你不起作用,并且你想把Li属性放在模板中,也许可以考虑以下几种形式:

  • 允许表单的HTML:
  • 不要使用liView(列表项视图),只需使用ulView(列表视图),并在模板中放置循环构造即可

  • 我很好奇你在哪里读到过你永远不应该替换
    这个.el
    。不改变它似乎很有道理,但我不得不这么做,原因正是你在这里概述的。很遗憾,不能用模板obj实例化视图。无论如何,在实践中替换
    this.el
    效果相当好(尽管感觉很脏),只要您在执行此操作后调用
    this.delegateEvents
    。@idbentley-如果我重新分配el,即使调用this.delegateEvents,我的事件也会中断
    className: "ui-draggable myGreatClass ui-corner-all"
    
    $(el).attr("title","your title")