浏览器自动填充&am​​p;数据绑定

时间:2014-03-11 11:31:53

标签: ember.js

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

问题是EmberJS似乎没有"看到"这些自动填充的值。如果我在控制器中使用this.get('userName'),则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>

我也创建了fiddle。这个问题在小提琴中是不可重复的,因为无论我运行了多少次。浏览器不提供保存密码。

听起来像Ember的数据绑定没有检测到自动填充的浏览器{{input}}

顺便说一句,我不得不使用概述here的技巧,以便让这些输入字段提供自动完成功能。

编辑:我定义了一个像下面这样的观察者,当网站首次加载并且自动填充已完成它的工作时,它不会被触发。

    userNameChanged: function() {
        console.log('User Name Changed');
    }.observes('userName'),

版本信息如下:

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: ------------------------------- 

3 个答案:

答案 0 :(得分:9)

这就是我使用的ATM。

Ember.TextField.reopen({
    triggerEvents: function () {
        Ember.run.next(this, function () {
            this.$().trigger("change");
        });
    }.on("didInsertElement")
});

在链接的github问题线程中找到的解决方案的修改。

(根据@ briangonzalez的建议更新)

答案 1 :(得分:6)

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

Ember.TextField.reopen({

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

});

答案 2 :(得分:2)

我没有答案,但我确实有同样的问题,我发现了这个Github问题: https://github.com/emberjs/ember.js/issues/2968

此外,这是关于自动填充中不同浏览器调度哪些事件的很好的总结: http://avernet.blogspot.in/2010/11/autocomplete-and-javascript-change.html