[英]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.