我正在使用带有 Mustache 的主干.js 作为模板引擎,我的主干视图之一执行杂项功能,其中之一是呈现一个下拉列表,其中包含从数据库中获取的项目。这些项目是使用 Ajax 获取的,该函数有两个参数,数据库表名和要在其上呈现列表的 div id。
主干视图:
MiscFunctionsView = GenericView.extend({
template: "dropdownList-template.html",
initialize:function(){
this.constructor.__super__.initialize.call(this);
},
drawDropDownList: function(tableName,divId){
this.$el=$("#"+divId);
console.log(this.$el);
var that = this;
$.ajax({
url: this.basePath + "misc.php",
type:"post",
data:{
ac:"ddl",
table_name: tableName
},
success:function(res){
that.handleResponse(res);
}
});
}
});
PS handelResponse() 和 render() 函数是在 GenericModel 中定义的,试图尽量减少问题中的代码量,如果需要的话告诉我。
html页面:
<form id="searchForm">
<div id="occupation">
</div>
<div id="p-type">
</div>
<div id="a-type">
</div>
</form>
<script type="text/javascript">
$(function(){
var misc = new MiscFunctionsView();
misc.drawDropDownList("occupation","occupation");
misc.drawDropDownList("person_type","p-type");
misc.drawDropDownList("account_type","a-type");
});
</script>
加载后的页面:
<form id="searchForm">
<div id="ddl">
</div>
<div id="search-results">
<select name="account_type" id="account_type-ddl">
<option value="1">Developer</option>
<option value="2">Free Individual</option>
<option value="3">Premium individual</option>
</select>
<select name="occupation" id="occupation-ddl">
<option value="1">Actor</option>
<option value="2">Director</option>
<option value="3">Producer</option>
</select>
<select name="person_type" id="person_type-ddl">
<option value="1">Established</option>
<option value="2">Upcoming</option>
<option value="3">Corporate</option>
</select>
</div>
<div id="results">
</div>
</form>
您可以看到所有下拉列表都在同一个 div 中呈现,这是任意的,这意味着如果我重新加载页面,它们可以在不同的 div 中呈现,但它们三个都在同一个 div 中。即使在渲染之前记录 this.$el 表明正确的 div 确实在对象中。
我认为这可能与 Ajax 有关,因此async:false
在 Ajax 调用中进行了尝试,但同样的事情发生了。
有什么想法吗?