使用jQuery在下划线模板中引用错误

时间:2013-07-02 14:43:54

标签: jquery templates underscore.js

代码来自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

2 个答案:

答案 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对象的对象。模板会爆炸并能够遍历项目。

请参阅:http://jsfiddle.net/nmBGC/2/