【问题标题】:djit.layout.Tabcontainer - click-based event is fired two timesdjit.layout.Tabcontainer - 基于点击的事件被触发两次
【发布时间】:2010-01-16 15:58:15
【问题描述】:

我想在选择事件上添加侦听器,但通过下面的代码实现两次触发事件。只有一次正确触发 javascript 核心 onClick 事件。

dojo.connect(myTabCont, "onButtonClicked", function(tabList){
    console.log(tablist);
});
dojo.connect(myTabCont, "selectChild", function(tabList){
    console.log(tablist);
});

//work fine - one click one fire
dojo.connect(myTabCont, "onClick", function(event){
    console.log(event);
});

是否有功能或错误?或者你能帮助如何解决这些功能或如何破坏这个功能||错误。

谢谢

【问题讨论】:

  • 我不明白你为什么连接到onButtonClicked,selectChild还不够吗?
  • 好吧,因为我发现了如何将事件连接到小部件,并且在测试期间我试图找到解决问题的方法。只是为了测试。

标签: dojo dijit.layout


【解决方案1】:

听起来像一个错误。 selectChild() 是幂等的,所以调用它两次没有害处(除了像你这样连接到它的人 :-)),这就是我们没有注意到问题的原因。

您可以监控 [widgetId]-selectChild 主题,该主题只会触发一次,或者在 foo == myTC.selectedChildWidget 时忽略 myTC.selectChild(foo) 调用。

【讨论】:

  • 我将监控这个状态,但我认为这不是一个大问题,直到您构建 UI,其中小部件中的所有内容更改都通过 ajax 请求进行管理。顺便说一句 - dojo 框架是强大的工具包,干得好。
  • Stack_Container.selectChild 方法中旧选择和新选择之间的相等检查是可以的!没有错误。注册的“selectChild”被调用了两次,这是正确的行为。 “selectChild”的第一次调用是用户触发的事件,第二次调用是在 StackContainer 检查旧选择是否等于新选择时以编程方式进行的。
【解决方案2】:

您可以监控 [widgetId]-selectChild 主题,其中 只会触发一次,或者忽略 myTC.selectChild(foo) 在 foo 时调用 == myTC.selectedChildWidget。

Stack_Container.selectChild 方法中旧选择和新选择之间的相等检查是可以的!

没有错误。注册的“selectChild”被调用两次,这是正确的行为。 “selectChild”的第一次调用是由用户触发的事件,第二次调用是在 StackContainer 检查旧选择是否不等于新选择并显式触发 tabItem 时以编程方式调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多