我正在迭代一个格式如下的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 />
答案 0 :(得分:2)
此修改后的模板的组合:
<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
方法,它能够以任何你喜欢的方式修改小部件,在它构建之后并且在它显示之前。
请参阅this guide并在那里搜索 postCreate 。