簡體   English   中英

如何動態地將Dijit小部件添加到Dojo表單中?

[英]How do I dynamically add a Dijit widget to a Dojo form?

我試圖將新的FilteringSelect小部件動態地添加到我用聲明性標記制成的現有表單中(在頁面加載時)。

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等)調用新的小部件,它不會發布!

除了嘗試dojo.create之外,我還嘗試直接調用FilteringSelect小部件。 這也制作了小部件,但在POST期間未在表單中注冊值。

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();

我瘋了試圖解決這個問題。

因此,似乎存在某種錯誤或某些錯誤。 我必須顯式定義'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 );
}

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

// 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
);

閱讀所有關於它的內容:

是的,在按Eugene Lazutkin的說明創建小部件時,與篩選選擇相關的隱藏輸入類型會從ID開始獲取名稱,並且隱藏字段的值也正在正確更新。 但是,當通過.create()方法創建過濾選擇時,我們需要指定名稱,並且從過濾選擇中選擇一些值后,隱藏字段的值也不會更新(即使我們模糊了)。 尤金·拉祖金(Eugene Lazutkin)您能讓我知道為什么會發生這種情況嗎...如何更新.create()方法中隱藏字段的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM