我有两个按钮,并希望根据按下的按钮将不同的自定义模板窗口小部件加载到div中.它在第一次单击时工作正常,但在再次单击任一按钮时会出现主题错误.我有一个非常简单的例子来尝试让这个概念起作用
我的模板代码(有两个非常相似):
define([
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
"dojo/text!Templates/Person.htm"
], function (declare, _WidgetBase, _TemplatedMixin, personTpl) {
return declare([_WidgetBase, _TemplatedMixin], {
templateString: personTpl
});
});
我的模板(有两个非常相似):
<div>
<p>Bob Jones</p>
</div>
主页:
<body class="claro">
<script>
require([
"dijit/form/Button",
"Templates/Person", "Templates/Person2", "dojo/domready!"
], function (Button, Person, Person2) {
var Button1 = new Button({
label: "Person1",
onClick: function () {
var p = new Person({}, "page");//error occurs here after a button has been pressed once
}
}, "btnPerson1").startup();
var Button2 = new Button({
label: "Person2",
onClick: function () {
var p2 = new Person2({}, "page"); //error occurs here after a button has been pressed once
}
}, "btnPerson2").startup();
});
</script>
<button id="btnPerson1" type="button"></button>
<button id="btnPerson2" type="button"></button>
<div id="page"></div>
</body>
谢谢你的任何想法
解决方法:
嘿,我拿了你的代码,我创建了一个jsfiddle测试,现在我意识到你的问题是什么.
如果我理解正确你在创建第二个对象和其他对象时遇到麻烦.对于第一个小部件,我相信你没事.
所以,第一个对象没问题的原因是因为dojo使用你的id创建了widget,并且它们有一个名为widgetid的东西. widgetid放在一个列表中,如果你调用widget的destroy方法,它就会从那里删除;但是,当您调用窗口小部件的destroy方法时,它将破坏该节点.这是解决问题的jsfiddle链接,如果我理解正确,请告诉我.
http://jsfiddle.net/cyeddpe5/26/
define("Person",[
"dojo/_base/declare",
"dijit/_WidgetBase",
"dijit/_TemplatedMixin",
], function (declare, _WidgetBase, _TemplatedMixin, personTpl) {
return declare([_WidgetBase, _TemplatedMixin], {
templateString: "<div><p>Bob Jones</p></div>"
});
});
require([
"dijit/form/Button",
"Person", "dojo/domready!"
], function (Button, Person) {
var Button1 = new Button({
label: "Person1",
onClick: function () {
//Here is the trick
if(window.p)
{
window.p.destroy(false);
var page = document.createElement("div");
dojo.body().appendChild(page);
page.setAttribute("id","page");
}
window.p = new Person({}, "page");//error occurs here after a button has been pressed once
}
}, "btnPerson1").startup();
});
我不喜欢在div中使用id来创建我的小部件,而不是我通常使用对小部件的引用,但这取决于你.请记住销毁窗口小部件并重新创建节点.我很确定有一种方法可以破坏小部件,保持节点活着,但我没有时间找到它.抱歉.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。