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