0

내가 무엇을하려하는지 :Ember.js를 사용하여 키보드 이벤트를 처리하는 일반적인 패턴은 무엇입니까?

브라우저에 div 배열이 있다고 가정하면 사용자 요청에 따라 div가 인스턴스화되거나 삭제됩니다. 왼쪽 또는 오른쪽 화살표 키를 누르면 div가 왼쪽이나 오른쪽으로 이동해야합니다.

내 전류 (잘못 조작) 솔루션 :

이벤트 처리 및 위임 :

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(); 

응용 프로그램 컨테이너보기 :

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) 
    }, 


}); 

응용 프로그램 뷰 클래스 (완전성에 대해, 정말 관련이없는) :

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

    ... 

    move: function(param){ ... } 

}); 

* DOM 선택 및 변경 CSS 속성 로직의 대부분은 애니메이션 믹스 인을 통해 뷰로 가져옵니다.

당신이 볼 수있는 것처럼, 난 정말이 구현을 좋아하지 않는 이유는

각 키 이벤트는 내가 한 일을 키 (37)를 원하는 경우 어떤 컨테이너보기에서 특정 기능에 결합되어
  1. 어떤 상황에서는 다른 상황에서 (예를 들어, 마우스 화살표가있는 경우)?

  2. onDocumentKeyDown 함수가 문서에 추가되었는데, 그 이유를 정확하게 말할 수는 없지만 그게 나에게 불쾌 해 보인다.

  3. ObjectsView는 인스턴스 이벤트 위임을 관리하는 논리를 모두 가지고 있습니다. 엠버의 containerView는 탐색 로직을 전혀 처리하지 않아도됩니까? (나는 그것들을 두 개의 다른 기능으로 분리 할 수있다. 그러나 이벤트가 같은 방식으로 처리된다면, 그것들은 도덕적으로 동등한 해결책으로 보인다).

는 단일 인스턴스 중앙 허브의 일종을 통해 키 이벤트를 처리 엠버의 모든 일반적으로 사용되는 패턴이나 그냥 JS MV * 프레임 워크가 있습니까, 다음 응용 프로그램 상태에 따라 시스템의 다른 부분으로 전파? 그리고이 Ember 라우터 개념은 어떻게 든 여기에 적합합니까?

감사합니다.

답변

관련 문제