2011-12-27 2 views
1

ember.js를 탐색하는 방법으로 100 % 기능 호환 버전으로 백본 todo 예제 응용 프로그램을 다시 만들고 있습니다. 내가 실행 한 첫 번째 문제점은 생성 된 할 일을 편집하기 위해 더블 클릭 한 후, Ember.TextField에서 blur 이벤트를 처리하여 편집 모드를 종료하는 방법입니다. 다음과 같이 현재 코드는 다음과 같습니다 나는 Ember.TextField에 의해 정의 된 입력 요소에서 blur 이벤트는 것 거품 내 시야까지하지만 내보기에 흐림 핸들러가 결코 호출되는 것 같다 것으로 가정했다Ember보기의 TextField 자식 흐림 처리

<script type="text/x-handlebars" data-template-name="todo-list-template"> 
    <ul> 
    {{#each App.TodosController.todos}} 
     {{#view App.TodoView tagName="li" contentBinding="this"}} 
     {{#if editMode}} 
      {{view Ember.TextField valueBinding="content.text"}} 
     {{else}} 
      {{content.text}} 
     {{/if}} 
     {{/view}} 
    {{/each}} 
    </ul> 
</script> 

App.TodoView = Ember.View.extend({ 
    editMode: false, 
    doubleClick: function(evt){ 
    this.set('editMode', true); 
    }, 
    blur: function(evt){ 
    this.set('editMode', false); 
    } 
}); 

. 사용자 정의 App.TextField가 정의하는 이유

답변

7

나는 소스를 보았고, 나는 당신이 믹스 인 TextSupport https://github.com/emberjs/ember.js/blob/master/packages/ember-handlebars/lib/controls/text_support.js#L25-28

에 정의 된 focusOut 이벤트를 사용해야합니다 그리고 focusOut 이벤트가 parentView까지 거품을하지 않는 생각 이잖아.

핸들 바 :

<script type="text/x-handlebars"> 
<ul> 
{{#each App.TodosController.todos}} 
    {{#view App.TodoView tagName="li" contentBinding="this"}} 
    {{#if view.editMode}} 
     {{view App.TextField editModeBinding="view.editMode" valueBinding="view.content.text"}} 
    {{else}} 
     {{view.content.text}} 
    {{/if}} 
    {{/view}} 
{{/each}} 
</ul> 
</script>​ 

JS :

App.TextField = Ember.TextField.extend({ 
    didInsertElement: function(){ 
    this.$().focus(); 
    }, 

    focusOut: function(evt) { 
    this.set('editMode', false); 
    } 
}); 

App.TodoView = Ember.View.extend({ 
    editMode: false, 
    doubleClick: function(evt) { 
     this.set('editMode', true); 
    } 
}); 

확실히 그렇게 대답에 대한 감사를 작동하는 것 같다 http://jsfiddle.net/cvWWe/34/

+2

우물에서 작업 예제를 참조하십시오. 지금까지는 ember를 좋아하지만 때로는 새로운 뷰 객체에 각 노드를 래핑 할 필요없이 자식 노드의 DOM 이벤트를 처리 할 수 ​​있기를 원합니다. 그 스타일에 조금 어긋나거나 심지어 코드 냄새라고 생각합니다. – user1117841

+2

이벤트를 처리하려는 경우 일반적으로 이러한 이벤트를 캡슐화하기 위해 새보기를 만들어야한다고 생각합니다. 우리는 간단한 대상/액션 사례를위한 솔루션을 개발하고 있지만 포커스/흐림의 경우 사용자 정의보기를 만들기에 충분할 정도로 복잡합니다. –