作为一种探索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事件会冒泡到我的视图,但我的视图上的模糊处理程序似乎永远不会被调用.
我查看了源代码,我认为你必须使用focusOut
TextSupport 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/上的工作示例
归档时间: |
|
查看次数: |
6243 次 |
最近记录: |