2013-07-02 75 views
2

代碼來自Addy Osmani:Learning JavaScript Design Patterns,我沒有真正實現。jQuery下劃線模板引用錯誤

我可能是盲目的在這裏,但我看不出有什麼不對的:

的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

+0

您在哪裏定義了'items'? – YD1m

+0

從Flickr返回,參見小提琴 – PHearst

回答

2

簡短的回答:這不是真的很容易/便利通過使用這種微小的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模式的插件(如果你仍然想使用它),如果你不想爲當前的一個做一個醜陋的解決方法。 我發現另一個來源是:Passing arrays via jQuery tiny PubSub

希望這有助於;)

0

這工作:

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

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

}); 

_.template()爆炸,你傳遞給它的對象。因此,不要傳遞結果對象,而是傳遞一個包含由結果組成的項目對象的對象。該模板爆炸了這個並且能夠遍歷這些項目。

請參閱:http://jsfiddle.net/nmBGC/2/