2015-01-05 75 views
0

我是DOJO新手,我正在使用DOJO 1.5.0版本通過迭代DOJO中的JSONArray創建動態複選框

我想通過在DOJO中迭代JSONArray來創建動態複選框。這種動態創建將在特定事件上完成,比如當我們選擇一些組合框值時。

例如,考慮下面JSONArray:

變種tempJSONArray = [{ROLE_ID = '1',ROLE_NAME = '基於role1'},{ROLE_ID = '2',ROLE_NAME = '基於role2'},{ role_id ='3',role_name ='role3'}]

我想顯示對應於角色名稱的複選框。複選框的名稱將是role_name,值將是來自JSON對象的role_id。 另外我想添加'onChange'事件到複選框,因爲在這個事件中,我想用role_ids做一個Ajax調用服務器。

謝謝您的閱讀,如果需要進一步澄清,請讓我知道。

+0

您需要向我們展示您到目前爲止嘗試過的方法。毫不費力地尋求解決方案並不會吸引太多答案。 – frank

+0

如果你是DOJO的新手,你爲什麼要使用1.5.0版本? –

+0

@ThomasKagan:項目已經與版本1.5.0一起構建,並且我是團隊中的新成員。我需要在現有項目中添加一項功能。謝謝! –

回答

0

做了一些互聯網衝浪和玩代碼後,我可以寫下面的代碼,這對我的場景工作正常。所以認爲這會對其他人有所幫助。

for (var i = 0; i < roleJSON.length; i++) { 
         var role = roleJSON[i]; 
         var tr = dojo.create("tr",{id:"rolebasecheckbox"+i,'class':'rolebasecheckbox'}); 
         alert("tr=" + tr); 
         var td= dojo.create("td",{innerHTML:'<input id="roleBaseCb_'+i+'" value="'+role.role_id+'" dojoType="dijit.form.CheckBox" onclick="alert('onclick event')" type="checkbox" /> <label for="roleBaseCb_'+i+'">'+role.role_name+'</label>',align:'center'},tr); 
         alert("td=" + td); 
         if(i==0){ 
         alert("i is 0"); 
         dojo.place(tr, "roleBaseComboTR", "after"); 
         }else{ 
          dojo.place(tr, "rolebasecheckbox"+(i-1), "after"); 
         } 
        } 
+0

確實使用我提到的工具'dojo.place()'和'dojo.create()'。儘管如此,我並不推薦創建這樣的Dijit小部件,要麼通過將它們放入HTML中來聲明式地使用它們,要麼使用正確的API以編程方式進行編程。使用JavaScript製作聲明式樣式的小部件對我來說聽起來是錯誤的。 – g00glen00b

+0

@Dimitri M:是的,謝謝你的幫助。首先,我嘗試讓它們以編程方式進行編輯,但它不適用於我的場景,所以我使用上述方式創建了它。但是從下次開始,我們會嘗試或確保以編程或聲明方式進行編程。 –

1

可以使用dojo.create()方法來創建DOM節點和dojo.place()方法將它們放在另一個元素中,例如:

var checkbox = dojo.create("input", { 
    type: "checkbox", 
    value: "1" 
}); 

你可能就需要把它包一個<label>內顯示文本(您也可以使用dojo.create()創建)。然後你可以將它們放置在列表裏面,例如:

dojo.place(label, "checkboxes"); 

這將包裹在一個元素中的複選框(或標籤)與ID checkboxes。所以,如果你現在在循環中創建你的複選框,它應該可以工作。