Forms 如何将Dijit小部件动态添加到Dojo表单?
我正在尝试将一个新的FilteringSelect小部件动态地添加到一个由声明性标记(在页面加载时)组成的预先存在的表单中 这段代码正确地构建了FilteringSelect小部件,但该小部件似乎没有在表单中注册。每当我提交表单时,新窗口小部件中的值都不会出现。不过,validation属性可以正常工作,它可以正确地从存储中提取值。我甚至可以通过它的jsId(Prerequisite1、Prerequisite2等)调用新的小部件,它只是不会发布 我还尝试直接调用FilteringSelect小部件,而不是dojo.create。这也会创建小部件,但在发布期间没有将值注册到表单中Forms 如何将Dijit小部件动态添加到Dojo表单?,forms,post,widget,dojo,Forms,Post,Widget,Dojo,我正在尝试将一个新的FilteringSelect小部件动态地添加到一个由声明性标记(在页面加载时)组成的预先存在的表单中 这段代码正确地构建了FilteringSelect小部件,但该小部件似乎没有在表单中注册。每当我提交表单时,新窗口小部件中的值都不会出现。不过,validation属性可以正常工作,它可以正确地从存储中提取值。我甚至可以通过它的jsId(Prerequisite1、Prerequisite2等)调用新的小部件,它只是不会发布 我还尝试直接调用FilteringSelect小
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();
想弄明白这一点我快发疯了。这很容易。只需创建一个新对象,如下所示:
// 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
);
阅读所有关于它的信息:
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 );
}
是的,正如Eugene Lazutkin所说,在创建小部件时,与筛选选择相关的输入类型hidden将获得id的名称,并且隐藏字段的值正在正确更新。但是,当筛选选择被创建时,我们需要给出名称,并且在我们从筛选选择中选择一些值后,隐藏字段的值也不会更新(即使在模糊时)。尤金·拉祖特金你能告诉我为什么会发生这样。。。如何更新.create()方法中隐藏字段的值。这是我最初的意图。我在实例化dijit.form.FilteringSelect时没有包含dojo.create脚本。我已经回答了我自己的问题(看起来像个bug)。不过,谢谢你的帮助这很有帮助。我发现所需要的只是在我的情况下指定名称:
new dijit.form.TextBox({name:inputNode.name},inputNode)代码>
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 );
}