2010-06-30 85 views
1

我試圖添加一個新的FilteringSelect小部件動態地添加到一個先前存在的聲明式標記(頁面加載)中。如何動態地將Dijit小部件添加到Dojo窗體?

prereqs = 0; 
function addAnotherPrerequisite(){ 

    var newPreReqCursor = dijit.byId("Prerequisite"+(prereqs-1)).domNode; 
    dojo.create("input",{ 
     id:"prerequisite"+prereqs, 
     jsId:"Prerequisite"+prereqs,       
     dojoType:"dijit.form.FilteringSelect", 
     store:"PrerequisitesStore", 
     searchAttr:"name", 
     style:"width: 350px;", 
     required:"true", 
     class: "appendedPreReq"},newPreReqCursor,"after"); 


    dojo.parser.parse(newPreReqCursor.parentNode); 

    prereqs++; 
} 

此代碼正確地構建了一個FilteringSelect小部件,但小部件似乎沒有在表單中註冊。每當我提交表單時,新窗口小部件中的值都不會出現。雖然驗證屬性起作用,並且它可以正確地從商店中提取值。我甚至可以通過它的jsId(Prerequisite1,Prerequisite2等)調用新的小部件。它只是不會POST!

而不是dojo.create我也試着直接調用FilteringSelect小部件。這也構成了小部件,但在POSTing期間沒有在表單中註冊這些值。

var filteringSelect = new dijit.form.FilteringSelect({ 
     id: "prereq"+prereqs, 
     jsId: "Prerequisite"+prereqs, 
     store: PrerequisitesStore, 
     searchAttr: "name", 
     required: true, 
     style: 'width: 350px;', 
     class: 'appendedPreReq' 
    }, 
    "prerequisite"+prereqs).startup(); 

我瘋了,試圖弄清楚這一點。

回答

1

因此,它看起來像有某種錯誤或東西。我必須明確定義'name'屬性才能使窗口部件顯示在我的窗體的.getDependents()方法中。這就是dijit.forms如何獲取表單值的列表。這樣做後,我也無法通過dijit.byId訪問這個小部件(沒有返回任何東西,我默默地發現了錯誤),所以我通過它的jsId和eval來返回對象。

prereqs = 0; 
function(){ 
    var newPreReqCursor = eval("Prerequisite"+(prereqs-1)); 
    newPreReqCursor = newPreReqCursor.domNode; 

    dojo.create("input",{ 
      id:"Prerequisite"+prereqs, 
      name:"Prerequisite"+prereqs, 
      jsId:"Prerequisite"+prereqs, 
      dojoType:"dijit.form.FilteringSelect", 
      store:"PrerequisitesStore", 
      searchAttr:"name", 
      style:"width: 350px;", 
      required:"true", 
      class: "appendedPreReq"},newPreReqCursor,"after"); 

    var filterSelect = dojo.parser.parse(newPreReqCursor.parentNode); 
} 
+0

這很有幫助。我發現所有需要的是在我的情況下指定名稱:'new dijit.form.TextBox({name:inputNode.name},inputNode);' – Chris 2012-06-25 17:35:33

0

這很容易。只要創建一個新的對象這樣的:

// first let's create an empty node (you can reuse the existing one) 
var node = dojo.create("div", { 
    // all necessary node attributes 
    className: "appendedPreReq", 
    style: { 
    width: "350px" 
    } 
}, "myAnchorNodeId", "after"); 

// now let's create a widget 
var widget = new dijit.form.FilteringSelect(
    { 
    // all necessary widget properties 
    id: "prereq" + prereqs, 
    store: PrerequisitesStore, 
    searchAttr: "name", 
    required: true 
    }, 
    node // optional node to replace with the widget 
); 

閱讀全部內容:

+0

這是我的初衷。我沒有在嘗試實例化dijit.form.FilteringSelect時包含dojo.create腳本。 我已經回答了我自己的問題(看起來像一個bug)。不過,感謝您的幫助。 :D – 2010-06-30 22:25:28

0

是同時由尤金Lazutkin表示,輸入型隱藏的過濾選擇與將被命名爲ID,並且還隱藏字段的值是否正確更新創建部件。但是當過濾select被創建thr .create()方法時,我們需要給出名稱,並且在我們從過濾select中選擇了一些值(即使我們模糊不清)後,隱藏字段的值也不會更新。尤金Lazutkin你可以讓我知道爲什麼它的發生如此...如何更新.create()方法中隱藏字段的值。

相關問題