Ember.js 浏览器自动填充&;数据绑定

Ember.js 浏览器自动填充&;数据绑定,ember.js,Ember.js,我有一个相当简单的表单,它有一个电子邮件和一个密码输入字段。对于我的网页,Google Chrome的自动填充/保存密码已激活。现在,每当我加载我的网页时,Chrome会自动填充电子邮件和密码字段(这很好) 问题是EmberJS似乎并没有“看到”这些自动填充的值。例如,如果我在控制器中使用this.get('userName'),ember将返回空值 为了让ember“看到”这些自动填充的值,我必须单击每个{{input}或选项卡,然后ember开始看到它 这是一种非常简单的形式: <di

我有一个相当简单的表单,它有一个电子邮件和一个密码输入字段。对于我的网页,Google Chrome的自动填充/保存密码已激活。现在,每当我加载我的网页时,Chrome会自动填充电子邮件和密码字段(这很好)

问题是EmberJS似乎并没有“看到”这些自动填充的值。例如,如果我在控制器中使用
this.get('userName')
,ember将返回空值

为了让ember“看到”这些自动填充的值,我必须单击每个
{{input}
或选项卡,然后ember开始看到它

这是一种非常简单的形式:

<div>
<form class="form-signin form-vertical" id="login-form" {{action "login" on="submit"}}>

    <h3 class="form-signin-heading text-center sf-primary-color">Please Login</h3>

    {{input class="form-control" name="email" placeholder="Email address" value=userName type="text" tabindex=1}}
    {{input class="form-control" name="password" placeholder="Password" value=password type="password" tabindex=2}}

    {{#if errorMessage}}
        <div class="alert alert-danger text-center sf-fade-in">{{errorMessage}}</div>
    {{/if}}

    <div class="well">
        You may login with <kbd>demo</kbd>/<kbd>demo</kbd>.
    </div>

    {{input type="submit" value="Log In" tabindex=3}}

</form>
</div>

版本信息如下:

DEBUG: ------------------------------- ember.js:3461
DEBUG: Ember      : 1.4.0 ember.js:3461
DEBUG: Ember Data : 1.0.0-beta.4 ember.js:3461
DEBUG: Handlebars : 1.3.0 ember.js:3461
DEBUG: jQuery     : 1.10.2 ember.js:3461
DEBUG: ------------------------------- 

我没有答案,但我也有同样的问题,我发现了这个Github问题:

此外,这是一个很好的总结,说明了在autofill上,哪些事件是由不同的浏览器调度的:

不是完美但功能性的解决方案:

Ember.TextField.reopen({

  fetchAutofilledValue: function() {
    var $textField = this.$();
    setTimeout( function(){
      $textField.trigger("change")
    }, 250);
  }.on('didInsertElement')

});

这就是我用的自动取款机

Ember.TextField.reopen({
    triggerEvents: function () {
        Ember.run.next(this, function () {
            this.$().trigger("change");
        });
    }.on("didInsertElement")
});
修改链接github问题线程中的解决方案


(根据@briangonzalez的建议更新)

谢谢链接。我会看看我是否能打开这个问题或记录一个新的问题。从你链接到Google Chrome 36.0.1933.0版本canary的线程中发现这个问题并不存在。给你:)它在当前的Chrome for Mac稳定版(34.0.1847.116)中确实有效。很高兴这个问题得到解决。使用
Ember.run.next
setTimeout
更好。干得好另外,
Ember.run.next将上下文作为第一个参数。例如,
Ember.run.next(this,…)
将允许您删除
var thisTextField=this并将
此文本字段
替换为简单的
Ember.TextField.reopen({
    triggerEvents: function () {
        Ember.run.next(this, function () {
            this.$().trigger("change");
        });
    }.on("didInsertElement")
});