代码来自Addy Osmani:Learning JavaScript Design Patterns,我并没有真正得到实现。
我可能在这里失明,但我看不出这有什么问题:
ReferenceError:找不到变量:item
下划线模板:
<script id="resultTemplate" type="text/html">
<% _.each(items, function( item ){ %>
<li><p><img src="<%= item %>"/></p></li>
<% });%>
</script>
jQuery的:
var resultTemplate = _.template($("#resultTemplate").html());
[...]
演示:jsFiddle
答案 0 :(得分:2)
简短的回答:使用这个Tiny Pub / Sub插件将数组作为参数传递并不是非常容易/方便。
您可以在此处查看文档https://gist.github.com/cowboy/661855。正如您所看到的,在$.subscribe()
部分,数组元素只能逐个传递,所以在您的示例中它可以这样工作:
$.subscribe("/search/resultSet" , function(e, item1, item2, item3){
$("#searchResults").append(resultTemplate(item1));
$("#searchResults").append(resultTemplate(item2));
$("#searchResults").append(resultTemplate(item3));
// and so on
});
...模板应该相应更新。
当然这根本不方便。我建议你google另一个支持Pub / Sub模式的插件(如果你还想使用它),如果你不想为当前的一个做一个丑陋的解决方法。 我找到的另一个来源是:Passing arrays via jQuery tiny PubSub
希望这会有所帮助;)
答案 1 :(得分:0)
这有效:
// Subscribe to the new results topic
$.subscribe( "/search/resultSet" , function( e, results ){
$( "#searchResults" ).append(resultTemplate( {items: results} ));
});
_.template()
会爆炸您传递给它的对象。因此,不是传递结果对象,而是传递包含由结果组成的items对象的对象。模板会爆炸并能够遍历项目。