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

Posted

技术标签:

【中文标题】如何在 dojo 小部件中使用 json 成员对象【英文标题】:How can I use a json member object in dojo widget 【发布时间】:2013-04-23 20:14:12 【问题描述】:

我正在迭代一个格式是这样的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);
        );
    );
);

小部件 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是“信息”然后使用

     <a class="info" title="$title" href="$url">$title</a><br />

如果是新闻,请使用

          <a class="news" title="$title" href="$url">$title</a><br />

【问题讨论】:

将整个 entry 传递给您的小部件,而不仅仅是 Link。然后小部件可以根据linkType 自行添加/删除 CSS 类。 @PaulGrime 当我传递整个条目时它不起作用,因为我的 html 模板使用了 Link 对象及其属性。 【参考方案1】:

这个修改过的模板的组合:

<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

【讨论】:

那行得通。我应该在 postcreate 中使用它们。我去做。感谢两者。 由于某种原因,它还会将类添加到主 div 如何覆盖它? 我将其重命名为名称中不包含类的名称,并且可以正常工作。 Oleg Mikheev 我如何在 PostCreate 上使用您的代码。有样品吗

以上是关于如何在 dojo 小部件中使用 json 成员对象的主要内容,如果未能解决你的问题,请参考以下文章

Dojo 中有没有办法在 DOM 元素中查找所有小部件后代?

dojo 小部件不会发出事件

如何将 Dijit 小部件动态添加到 Dojo 表单?

如何编写我的小部件而不在 dojo.ready 中声明它的代码

Dojo Dijit - 小部件中的小部件

ajax 请求后重新加载 dojo 小部件