2013-02-11 52 views
3

好了,我想建立使用Dojo 1.8的东西,将类似于以下...如何在dojo 1.8中模板对象的嵌套数组?

<ul class="groups"> 
    <li class="group"> 
    <ul class="items"> 
     <li class="item"></li> 
    </ul> 
    </li> 
</ul> 

我做了一个简单的TemplatedWidget的“项目”(让我们称之为它TypeAItem,但也有可能不同类型的后面需要不同的模板“项”。

我有JSON代表组,它看起来像这样...

[{ 
    name: "groupName", 
    items: [{ title: "Item 1", type: "someRandomType", otherStuff: {} }] 
}] 

我的问题是,我不知道是什么最好的办法将构建这个嵌套列表。

最初我只是想使用像胡须一样的循环约定,但Dojo的模板似乎不支持。然后,阅读Creating a Custom Widget教程后,我想只使用一个嵌套像这样循环......

var groupHTML="<ul class='groups'>" 
for (group in groups) { 
    groupHTML += "<li class='group'>"; 
    for (item in groups.items) { 
    ??? 
    // I'm assuming something like var item = new TypeAItem(item); 
    // but I the tutorial only uses the .placeAt(domNode) function 
    // So I'm not sure how to get this to work. 
    } 
    groupHTML += "</li> 
} 
groupHTML += "</ul> 

这将是很容易在那里,如果我需要一些其他类型的物品的列表类型,然后我就可以改变一行代码,或者更好的是,将其设置为一个函数,并传入代表该项目的小部件。

由于我不知道如何让它起作用,我开始考虑可能需要将组设置到它们自己的小部件中,然后在postCreate方法中创建项目。然而,那么我需要弄清楚如何将group.items数组传递给它,以及如何使它足够灵活以便稍后处理不同的项目类型。

如果有人可以帮助,我将不胜感激!

回答

4

要以编程方式创建domNodes,请在dom-construct中使用create方法。

在窗口小部件,需要:“dojo/dom-construct”作为domConstruct

// create the groups and place it on the page 
var groups = domConstruct.create("ul", {'class':'groups'}, this.someAttachPoint, 'last'); 
// loop 
var group = domConstruct.create("li", {'class':'group'}, groups, 'last'); 
    // loop 
    var items= domConstruct.create("ul", {'class':'items'}, group , 'last'); 
    // loop 
    var item= domConstruct.create("li", {'class':'item',innerHTML:'item X'}, items, 'last'); 
    // or instead of innerHTML: item.textContent = 'Some text'; // (check browser support) 

注意domConstruct.create不要求你把该节点在创建时和“最后”是默认的。您稍后使用dojo place进行放置。此外,您可以使用dojo的循环数组功能,使您可以获得创意,并且有助手功能创建这些节点。

根据这些组和项目的不同,您可能仍然想要创建子窗口小部件。

另一种方法是使用dojox dtl模板,该模板允许您混合模板内循环的代码。这些模板像django模板一样工作(你需要引用django文档来找出它)

+0

谢谢你指向我的地方()。我担心DOM命中,因为教程总是将小部件放置在循环中,但是这解决了这些问题。 – hypno7oad 2013-02-12 20:43:35