我正在使用Backbone和Marionette来显示tumblr-posts列表。我想使用JSON api中提供的缩略图,但这给我带来了一个问题。我想要获取的网址称为"photo-url-100": "http://blablablablabla"
。通常在JS中我会使用parentObject['photo-url-100']
,但是当我使用Backbone / Marionette迭代所有项目时,根据我的意识,没有可用的根节点(所有属性都可以直接使用,例如{ {1}}而不是<%= id %>
。有人能指出我应该如何处理这个问题吗?
一些澄清:我正在使用MarionetteJS。根据Tumblr的文档,我在他的标题中添加了他们的“API”(在我的情况下为http://gentletruths.tumblr.com/api/read/json)作为脚本标记,有效地“引导”它。我将其作为集合处理,并将每个帖子作为模型处理。然后,此集合由<%= post.id %>
处理,每个模型由Backbone.Marionette.CompositeView
处理。因此,在我的Backbone.Marionette.ItemView
模板(下方)ItemView
有效(作为参考),但id
没有。
photo-url-100
我已经查阅了Marionette的注释源(这里的渲染函数:http://marionettejs.com/docs/backbone.marionette.html#section-188),但我不确定如何正确读取它并推断数据是如何可用的。
答案 0 :(得分:0)
渲染_.template()
时,只需将parentObject
包装在另一个对象中:
var compiled = _.template("<img id=\"<%= post.id %>\" src=\"<%= post['photo-url-100'] %>\">");
compiled({ 'post': parentObject });
修改强>:
您的模板:
<script id="instagram_item_template" type="text/template">
<a href="#" class="photos__frame">
<span class="caption"><%= post.id %></span>
<img src="<%= post['photo-url-100'] %>" alt="" class="photos__photo">
</a>
</script>
渲染模板:
Backbone.Marionette.ItemView.extend({
tagName: "li",
template: function(data){
return _.template($('#instagram_item_template').html(), { 'post': data })
}
});