gpt4 book ai didi

javascript - 使用 Ember.js,处理键盘事件的常见模式有哪些?

转载 作者:行者123 更新时间:2023-11-28 20:49:39 29 4
gpt4 key购买 nike

我正在尝试做的事情:

假设浏览器中有一个 div 数组,这些 div 会根据用户请求进行实例化或删除。当按下左箭头或右箭头键时,div 应该向左或向右移动。

我当前的(设计不当)解决方案:

事件处理和委托(delegate):

function onDocumentKeyDown( event ){
switch ( event.keyCode ){
case 37: App.objectsView.scrollLeft(); break;
case 39: App.objectsView.scrollRight(); break;
}
}


// add event listener to document
function addEventListeners() {
document.addEventListener( 'keydown', onDocumentKeyDown, false );
}
addEventListeners();

应用程序容器 View :

App.objectsView = Ember.ContainerView.create({

childViews: [],

// CRUD stuff
createView: function(){ ... },

deleteView: function(){ ... },

updateView: function(){ ... },

// navigation stuff
scrollRight: function(){
this.scroll('right')
},

scrollLeft: function(){
this.scroll('left')
},

scroll: function( direction ){
this.get('childViews').forEach( function( key ){
var object = key;
object.move( direction );
}, this)
},


});

应用程序 View 类(为了完整性,并不是那么相关):

App.ObjectView = Ember.View.extend( Animation, {

...

move: function( param ){ ... }

});

*注意,大部分 dom 选择和更改 css 属性逻辑都是通过动画 mixin 引入 View 的。

正如您所看到的,我真的不喜欢这个实现,因为:

  1. 每个按键事件都绑定(bind)到容器 View 中的特定功能,如果我希望按键 37 在某个上下文中执行一项操作,而在另一个上下文中执行其他操作(例如鼠标箭头所在的位置),该怎么办?

  2. onDocumentKeyDown 函数被添加到文档中,我不能确切地说出原因,但它看起来很刺耳。

  3. ObjectsView 具有管理实例化和事件委托(delegate)的逻辑。 Ember 中的 containerView 真的是用来处理导航逻辑的吗? (我可以将它们分成两个不同的函数,但如果事件以相同的方式处理,那么它们似乎是道德上等效的解决方案)。

Ember 或任何 JS MV* 框架中是否有任何常用模式,可以通过某种单实例中央集线器处理关键事件,然后根据应用程序状态传播到系统的其他部分?这个 Ember 路由器概念,是否适合这里?

谢谢!

最佳答案

为了使用 Ember 处理键盘事件,我们利用了 Flame.js 的 EventManager 实现。或许你也能得到类似的启发:https://github.com/flamejs/flame.js/blob/master/mixins/event_manager.js

关于javascript - 使用 Ember.js,处理键盘事件的常见模式有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12738679/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com