我有一个Dojo标签容器,当我点击某些按钮时,会动态添加一个新标签,其内容通过Ajax下载。选项卡包含动态表单元素,由Dojo解析和加载就好了。我还包括特定于每个选项卡的Javascript块,这些块也可以通过Ajax下载...但是,没有任何Javascript块执行!
标签内容示例:
<input id="test" name="test" type="text" dojoType="dijit.form.ValidationTextBox" />
<script type="text/javascript">
dojo.connect(dijit.byId('test'), 'onClick', function(evt){
alert('testing 123');
});
</script>
但是,如果我这样做,事件触发就好了:
<input id="test" name="test" type="text" dojoType="dijit.form.ValidationTextBox">
<script type="dojo/method" event='onClick'>
alert('testing 123');
</script>
</input>
我的问题是,为什么第一个例子中的javascript块没有工作?这是一个Dojo限制吗?此外,我还试图在小部件加载后设置属性和值。我如何激活,因为我必须使用像dojo.addOnLoad()这样的东西,因为它需要一个Javascript块,并且根据第一个例子不起作用,因此它不起作用...没有等效的小部件onLoad事件所以我也不能使用第二种方法......任何想法如何去做?
答案 0 :(得分:2)
“标签内容”实际上是内容窗格元素。除非使用<script type="dojo/method">
,否则无法在内容窗格中调用javascript。至少这是我所知道的。
更新:如果您使用dojox.layout.ContentPane
代替dijit.layout.ContentPane
,其中有关js的所有问题都会消失。从Dojo参考指南:
dojox.layout.ContenPane是dijit.layout.ContentPane的扩展,提供脚本执行等功能。
答案 1 :(得分:0)
看起来你需要使用dojo.hitch,这样你的函数在实际调用时就会在范围内。尝试使用:
dojo.connect(dijit.byId('test'), 'onCLick', dojo.hitch(this, function(evt) {
alert('testing123');
}));
您可以在此处详细了解:http://dojotoolkit.org/reference-guide/dojo/hitch.html#dojo-hitch
答案 2 :(得分:0)
您必须确保首先解析小部件。这样做:
dojo.addOnLoad(function(){/*connect code*/});