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