我正在尝试使用jQueryMobile和Backbone.js为Phonegap项目设置基础架构
我们将针对多个平台,并计划在将来进行扩展。
我希望我的Backbone代码完全不了解与 View 关联的HTML元素的类型,因为我们不知道跨平台的 View 是什么样子。
一个简单的示例是,在一个平台上,一个项目列表可能由ULLI元素组成,但是在另一个平台上,由于某些原因,我们可能希望将其切换为DIVP元素。

目前,如果我未指定tagName,则默认为DIV
我希望能够在一页上提供这样的模板:

<script id="attachmentTemplate" type="text/template">
     <li><a href="#"><%= title %></a></li>
</script>

并提供:
<script id="attachmentTemplate" type="text/template">
    <p><a href="#"><%= title %></a></p>
</script>

如果没有指定tagName(我说过,它默认为DIV),我将无法做到这一点。

有人有任何建议或方法吗?关键是我不希望Javascript知道HTML元素的类型,而是希望HTML定义它。

最佳答案

尽管我不推荐这种体系结构,但是您可以覆盖渲染方法:

render: function()
{
    // unbind all handlers since delegateEvents was called in the constructor
    this.undelegateEvents();
    // set this.el to the domElement from the templates
    this.el = this.template(this.model.toJSON()); // or however you get to your template
    // create the shorthand dom reference that setElement() creates
    this.$el = $(this.el);
    // re-delegate the events
    this.delegateEvents();
}

这意味着您不必担心在模板中定义的tagName。

编辑:查看 Backbone 代码,这正是setElement所做的,因此从理论上讲,您可以尝试
render: function()
{
    var tpl = this.template(this.model.toJSON());
    this.setElement(tpl, true);
    return this;
}

关于javascript - Backbone.js View Tagname是动态设置的吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10618860/

10-14 17:11