我有一个文本输入,用于从用户收集关键字,然后发送ajax请求(即获得成功的结果)。我想附加<ul>
和<li>
项目,每项代表一个结果。Backbone查看并非追加收藏更改
下面是其中包含搜索输入,并应得到附加的<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李结果。
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 });