我有一个文本输入,用于从用户那里收集关键字,然后发送一个 ajax 请求(获得成功的结果)。我想附加项目<ul>
,<li>
每个项目代表一个结果。
这是包含搜索输入并应获得附加<li>
结果的内容。
<div class="search_group pull-right">
<h5><a href="javascript:void(0);" class="show-groups">Find Other Groups<span class="caret"></span></a></h5>
<ul>
<li class="search-input">
<input type="text" class="search" name="search">
</li>
</ul>
</div>
我有以下下划线模板,它可以理想地代表集合中的每个结果。
<script type="text/template" class="template" id="template-search-result">
<% _.each(results,function(result){ %>
<li class="result">
<a href="/surnames/<%=URL%>">
<%=result.name%>
<span><%=result.members%> – Members</span>
<span><%=result.ancestors%> – Ancestors</span>
</a>
</li>
<% }); %>
</script>
现在,我的主干代码。
在用户在输入字段中输入内容后,我获取了我的结果集合,并且当该集合从我的服务器返回结果(我可以在控制台中成功看到)时,我希望 ResultView 将 ul 附加到额外的 li 结果。
window.Results = Backbone.Collection.extend({
url: function() {
return '/ajax/groups/search?q=' + query;
}
});
var results = new Results();
window.SearchInput = Backbone.View.extend({
el: ".search-input input",
events: {
"change": "getResults",
"keyup": "getResults",
"keydown": "getResults",
"paste": "getResults"
},
getResults: function() {
query = $('input').val();
results.fetch();
}
});
var searchInput = new SearchInput({ collection: results });
window.ResultView = Backbone.View.extend({
el: ".search-group ul",
initialize: function() {
_.bindAll(this, 'render');
this.collection.bind('change', this.render);
this.template = _.template($("#template-search-result").html());
},
render: function() {
this.$el.append( this.template( {results: this.collection.toJSON()} ));
return this;
}
});
var resultView = new ResultView({ collection: results });