如何禁用Dojo StackContainer中的热键

ryhaxcpt  于 2022-12-08  发布在  Dojo
关注(0)|答案(2)|浏览(155)

我正在使用Dojo 1.2在客户的网页上实现一些功能。我使用的小部件之一是dijit.layout.TabContainer,它继承了StackContainerStackContainer订阅键盘事件并创建一些热键,如向左箭头(arrow left)将一个标签页向左移动等。
现在来问一个问题:我想在我的TabContainer中禁用这个热键特性。是否有一个配置选项可以设置(在API中找不到)来实现这一点,或者必须修改Dojo代码,或者创建我自己的StackContainerTabContainer版本来摆脱热键?我当然不希望弄乱Dojo代码。
此致/ Fredrik

cwdobuhd

cwdobuhd1#

只需使用空主体重写_onKeyPress:

<div dojoType='dijit.layout.TabContainer'>
<script type='dojo/method' event='_onKeyPress'></script>
...
<div>

就像个护身符。

mf98qq94

mf98qq942#

我只是在这里即兴编码,我根本没有测试过。我正在把这个维基化,所以如果有任何问题,请发布正确的源代码。
在名为com/stackoverflow/KeyPresslessTabContainer.js的文件中使用以下javascript:

dojo.provide("com.stackoverflow. KeyPresslessTabContainer");

dojo.require("dijit.layout. TabContainer");

dojo.declare("com.stackoverflow.KeyPresslessTabContainer", dijit.layout. TabContainer, {
    _controllerWidget: "com.stackoverflow.KeyPresslessTabController"
});

dojo.declare("com.stackoverflow.KeyPresslessTabController", dijit.layout.TabController, {
  /*
   *  this is the important part.  The original code was:
   *  templateString: "<div wairole='tablist' dojoAttachEvent='onkeypress:onkeypress'></div>"
   *  In the template below, we remove the onkeypress listener,
   *  and thus key presses should be ignored.
   */
  templateString: "<div wairole='tablist'></div>"
});

相关问题