2

代码来自 Addy Osmani: Learning JavaScript Design Patterns,我并没有真正得到实现。

我可能在这里失明,但我看不出这有什么问题:

ReferenceError:找不到变量:项目

下划线模板:

<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

4

2 回答 2

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
});

...并且模板应相应更新。

当然,这根本不方便。如果你不想为当前的插件做一个丑陋的解决方法,我建议你谷歌搜索另一个支持 Pub/Sub 模式的插件(如果你仍然想使用它)。我发现的另一个来源是:通过 jQuery tiny PubSub 传递数组

希望这可以帮助 ;)

于 2013-07-10T02:18:02.427 回答
0

这有效:

// Subscribe to the new results topic
$.subscribe( "/search/resultSet" , function( e, results ){

    $( "#searchResults" ).append(resultTemplate( {items: results} ));

});

_.template()爆炸你传递给它的对象。因此,不要传递结果对象,而是传递一个包含由结果组成的项目对象的对象。模板对此进行了分解并能够迭代项目。

见:http: //jsfiddle.net/nmBGC/2/

于 2013-07-16T16:19:15.863 回答