我正在尝试将一个新的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等)调用新的小部件。它只是不会POST!
我还尝试直接调用FilteringSelect小部件而不是dojo.create。这也创建了小部件,但是在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();
我疯狂地试图解决这个问题。
答案 0 :(得分:1)
所以看起来有某种bug或者某种东西。我必须明确定义'name'属性,以使窗口小部件显示在我的窗体的.getDependents()方法中。这就是dijit.forms获取其表单值列表的方式。执行此操作后,我也无法通过dijit.byId访问此窗口小部件(没有返回任何内容,默默地捕获了我猜的错误),所以我通过其带有eval的jsId返回了该对象。
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 );
}
答案 1 :(得分: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
);
阅读所有相关内容:
答案 2 :(得分:0)
是的,在创建小部件时,如Eugene Lazutkin所说,与过滤选择相关的隐藏输入类型获取id的名称,并且隐藏字段的值也正确更新。但是当创建过滤选择thr .create()方法时我们需要给出名称,并且在我们从过滤选择中选择一些值之后,隐藏字段的值也不会更新(即使我们模糊了)。 Eugene Lazutkin你可以让我知道为什么会发生这种情况......如何在.create()方法中更新隐藏字段的值。