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