我遇到了一个以前从未见过的非常令人困惑的问题。我想知道我是否遗漏了一些非常明显的东西。
我有一个这样的模板(我用Underscore编译):
<a href="#advanced-search" data-toggle="modal">
Advanced search
</a>
<div id="advanced-search">
<div class="modal-header">header</div>
<div class="modal-body">
<form id="advanced-search-form">
// This has form elements
</form>
</div>
<div class="modal-footer">footer</div>
</div>
问题是每当我重新渲染使用模板的主干视图时,表单元素都不会渲染!初始渲染工作正常。
我尝试通过在表单元素中advanced-search-form
嵌套 a<div id="advanced-search-form">
并从表单元素中删除 id 来将表单元素与 id 分开。结果是嵌套div
的被渲染,而form
仍然没有。
我需要表单元素才能使用serializeArray
,它只适用于表单元素。
我想一种解决方法是编写一个可以序列化任何元素中的输入元素的函数,但这并不理想,我真的很想知道为什么会发生这种奇怪的事情。
感谢您的关注!
编辑:渲染代码现在我不是基于任何集合或模型事件重新渲染。我通过父视图中链接上的单击事件手动触发重新渲染。以下是我的两个视图(CoffeeScript)的基本结构:
AdvancedSearchView = Backbone.View.extend
template: _.template AdvancedSearchTpl #available via requirejs
render: ->
@$el.html @template()
ParentView = Backbone.View.extend
initialize: ->
_.bindAll @
$('body #refresh').livequery 'click', @refreshAdvancedSearch
render: ->
if !@advancedSearchElem #cache the view to save state
@advancedSearchView = new AdvancedSearchView
@advancedSearchElem = @advancedSearchView.render().el
$('#content').html @advancedSearchElem
refreshAdvancedSearch: ->
@advancedSearchElem = @advancedSearchView.render().el #from here, the template is rendered without the form element
@render()
parentView = new ParentView
parentView.render()