我正在迭代一个json,其格式如下
request("js/my/data/sample.json", {
handleAs: "json"
}).then(function (jsonResults) {
arrayUtil.forEach(jsonResults.LinksMap, function (List) {
arrayUtil.forEach(List.LinksMap.entry, function (Ientry) {
var widget = new support(Ientry.Link).placeAt(authorContainer);
});
});
});
Widget HTML模板看起来像
<div><span title="${title}">${title}</span></div> <br />
<div><span title="${description}">${description}</span></div> <br />
<a class="info" title="${title}" href="${url}">${title}</a><br />
我想使用json中提供的对象linkType在小部件的html模板中使用不同的类,所以如果它linkType是"information"那么使用
<a class="info" title="${title}" href="${url}">${title}</a><br />
如果是新闻,则使用
<a class="news" title="${title}" href="${url}">${title}</a><br />
修改后的模板的组合:
<div><span title="${Link.title}">${Link.title}</span></div> <br />
<div><span title="${Link.description}">${Link.description}</span></div> <br />
<a class="${className}" title="${Link.title}" href="${Link.url}">${Link.title}</a><br />
和修改后的代码应该可以达到这个效果:
request("js/my/data/sample.json", {
handleAs: "json"}).then(function(jsonResults){ arrayUtil.forEach(jsonResults.LinksMap, function(List){arrayUtil.forEach(List.LinksMap.entry, function(Ientry){
if('information' === Ientry.linkType) Ientry.className = 'info';
else if('news link' === Ientry.linkType) Ientry.className = 'news';
var widget = new support(Ientry).placeAt(authorContainer);
});});});
但是一个更好的想法是在你的小部件中实现一个postCreate
方法,这个方法可以在小部件构造好之后和显示之前以任何你喜欢的方式修改小部件。
请参考本指南并在此搜索postCreate