如何在dojo小部件中使用json成员对象

时间:2013-04-23 20:14:13

标签: json dojo widget

我正在迭代一个格式如下的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 />

1 个答案:

答案 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