我有这个相当简单的表单,它有一个电子邮件和一个密码输入字段。对于我的网页,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: -------------------------------
答案 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