我正在使用Zend_Dojo_Form
撰写表单。
一切顺利,除非我在表单中动态插入元素(使用ajax,用户可以通过单击[+]按钮添加更多元素)。
我设法将新的Zend_Dojo_Form_Element_FilteringSelect
插入到页面中,但该元素不是dojo启用的(没有自动完成或tundra样式)。
我猜第一次加载页面时dojo会转换现有的表单元素,并且在添加新节点时不会再次解析它们...但是我找不到如何告诉dojo那里有新的元素在镇上。
我尝试了什么:
dojo.parser.parse();
或dojo.parser.parse('id_of_new_element');
Zend_Dojo_View_Helper_Dojo::setUseDeclarative();
(如nabble's forums所示)我添加新元素的方法是Jeremy Kendall描述的方法。
我不知道我的问题是否来自与Zend,Dojo的不兼容,或者我是否遗漏了某些东西......
答案 0 :(得分:1)
经过一番摆弄后,我终于设法让它运转起来。
在Jeremy Kendall's javascript code中,您必须在函数ajaxAddField()
中插入以下脚本// Insert new element before the Add button
$("#addElement-label").before(newElement);
// Parse the element to receive Dojo style
var n = dojo.byId("newName" + id);
n.outerHTML = newElement;
dojo.parser.parse(n);
并替换
searchString = '*[id^=newName' + lastId + '-]';
$(searchString).remove()
在函数removeField()中
// Destroy dijits before destroying the node
var n = dojo.byId("newName" + lastId);
var dijits = dijit.findWidgets(n);
if (dijits) {
for (var i = 0, n = dijits.length; i < n; i++) {
dijits[i].destroyRecursive();
}
}
dijits = dojo.parser.parse("newName" + lastId);
// Destroy the node
dojo.destroy("newName" + lastId);
也许还有更好的方法,但它对我有用。删除节点时,dijits have to be destroyed before,否则HTML片段将不再被解析。