Ember.js 在ember中处理输入键事件

Ember.js 在ember中处理输入键事件,ember.js,ember-cli,Ember.js,Ember Cli,我的应用程序中有一个组件。它有一个带有文本字段的表单。它将有一个提交按钮。当按下提交按钮时,它将向服务器发送一个post请求。我还在components js文件中处理了一个键盘事件。当按下enter键时,它将向服务器发送一个post请求。当连续按两次enter键时,它将被禁用向服务器发出两个post请求,第一个请求成功,第二个请求失败。 我想让我的应用程序在这样的距离,即使用户连续按两次enter键,它应该只发送一个post请求到服务器。任何人都可以帮我解决这个问题。提前感谢 组件js文件:

我的应用程序中有一个组件。它有一个带有文本字段的表单。它将有一个提交按钮。当按下提交按钮时,它将向服务器发送一个post请求。我还在components js文件中处理了一个键盘事件。当按下enter键时,它将向服务器发送一个post请求。当连续按两次enter键时,它将被禁用向服务器发出两个post请求,第一个请求成功,第二个请求失败。 我想让我的应用程序在这样的距离,即使用户连续按两次enter键,它应该只发送一个post请求到服务器。任何人都可以帮我解决这个问题。提前感谢

组件js文件:

尝试使用


您可以玩您需要禁用
submitForm()
,直到POST请求完成。您可以通过在组件上设置属性
submitting
,并在POST之前将其打开,在承诺解决后将其关闭来实现这一点。或许可以尝试以下方式:

export default Ember.Component.extend({
  submitting: false,
  keyDown: function(event) {
    if (event.keyCode === 13) {
      this.submitform();
    }
  },
  submitform() {
    // Run only if not currently submitting
    if (!this.get('submitting')) {
      // What to do when submit succeeds
      const success = () => {
        this.set('submitting', false);
      }
      // What to do when submit fails
      const fail = () => {
        this.set('submitting', false);
      }
      // Do the POST request
      this.set('submitting', true);
      this.get('someModel').save().then(success).catch(fail);
    };
  }
});
此外,这允许您使用模板做一些有趣的事情,例如,在POST承诺尚未解决的情况下禁用提交按钮并设置其样式:

<button {{action 'submitForm'}} disabled={{submitting}} class="{{if submitting 'loading'}}">
  {{#if submitting}}
    Submitting ...
  {{else}}
    Submit
  {{/if}}
</button>

{{{#如果提交}
提交。。。
{{else}
提交
{{/if}

哦,最后,不需要使用
let self=this不再。使用ES6箭头函数
()=>{…}
这样你就可以继续在里面使用
这个

我建议你结帐。是否有必要在ember中禁用键盘事件?这样我就可以在开始时启用键盘事件。一旦按下enter键,我就可以禁用键盘事件。这样就不会向服务器发出进一步的请求。你试过我的答案吗?是的,我试过了,但没有但当我连续按两次Enter键时,它会触发两次keyDown事件,两次submitForm方法,并向服务器发出两个请求,第一个请求成功,第二个请求失败。最好像第一次按Enter键一样,我可以禁用键盘事件输入,类似于禁用按钮。因此,即使用户连续按Enter键,仅第一次按Enter键就会向服务器发出请求。是否还有其他方法可以这样做?@bharathwajravi禁用键盘事件不是正确的方法。我用twiddle更新了我的答案,你可以查看一下。有没有办法计算一下按Enter键的次数?
export default Ember.Component.extend({
  submitting: false,
  keyDown: function(event) {
    if (event.keyCode === 13) {
      this.submitform();
    }
  },
  submitform() {
    // Run only if not currently submitting
    if (!this.get('submitting')) {
      // What to do when submit succeeds
      const success = () => {
        this.set('submitting', false);
      }
      // What to do when submit fails
      const fail = () => {
        this.set('submitting', false);
      }
      // Do the POST request
      this.set('submitting', true);
      this.get('someModel').save().then(success).catch(fail);
    };
  }
});
<button {{action 'submitForm'}} disabled={{submitting}} class="{{if submitting 'loading'}}">
  {{#if submitting}}
    Submitting ...
  {{else}}
    Submit
  {{/if}}
</button>