在ember视图中处理TextField子项上的模糊

1 javascript ember.js

作为一种探索ember.js的方法,我正在重新创建具有100%功能兼容版本的主干todo示例应用程序.我遇到的第一个问题是双击编辑创建的待办事项后,如何处理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);
  }
});
Run Code Online (Sandbox Code Playgroud)

我假设来自Ember.TextField定义的输入元素的blur事件会冒泡到我的视图,但我的视图上的模糊处理程序似乎永远不会被调用.

pan*_*atz 7

我查看了源代码,我认为你必须使用focusOutTextSupport mixin中定义的事件https://github.com/emberjs/ember.js/blob/master/packages/ember-handlebars/lib/controls/text_support.js# L25-28

focusOut该事件不会冒泡到parentView,这就是为什么一个自定义的App.TextField定义.

把手:

<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>?
Run Code Online (Sandbox Code Playgroud)

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);
    }
});
Run Code Online (Sandbox Code Playgroud)

请参阅http://jsfiddle.net/cvWWe/34/上的工作示例

  • 好吧,这肯定似乎工作,所以谢谢你的答案.到目前为止我喜欢ember,但有时我觉得我希望能够处理子节点的dom事件而不必将每个节点包装在一个新的视图对象中.我想这有点违背风格,甚至可能是代码味道. (2认同)
  • 如果您想处理事件,我们通常认为您应该创建一个新视图来封装这些事件.我们正在研究简单目标/动作案例的解决方案,但焦点/模糊的情况非常复杂,您应该只是制作自定义视图. (2认同)