我正在使用带有 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 调用中进行了尝试,但同样的事情发生了。
有什么想法吗?