在开始这个问题之前,我发现了类似于我正在寻找的东西:How can I access an Ember input as a jQuery element?
该方法的问题是focusEmail()
中的View
方法只会在Controller的error
属性从false变为true时第一次被调用。如果我再次提交表单,error
仍然是正确的,所以从某种意义上说它没有改变,因此查看的focusEmail()
不会被解雇。
我可以在这里做什么来始终关注输入元素,而不仅仅是error
第一次从 false 变为 true ?
// login_view.js
var LoginView = Ember.View.extend({
focusPassword: function() {
if (this.get('controller.error')) {
this.$('#password').focus();
}
}.observes('controller.error')
});
// login_controller.js
var LoginController = Ember.Controller.extend(Ember.SimpleAuth.LoginControllerMixin, {
error: false,
actions: {
loginFailed: function(xhr) {
this.set('error', true);
this.set('errorMessage', xhr.responseText);
}
}
});
注意:只要从服务器发送非 200 响应,就会触发loginFailed
。 (我正在使用ember-simple-auth库)
更新:我能够在LoginView中使用submit
方法使其工作。除了我上面的内容:
submit: function() {
this.get('controller').send('error', false);
},
然后在控制器中:
error: function(value) {
this.set('error', value);
}
如果有人有更好的方法,更简单,更容易,请在下面发布,我会接受它作为答案。
答案 0 :(得分:1)
您是否尝试使用以下命令将error属性显式标记为已更改:notifyPropertyChange? http://emberjs.com/api/classes/Ember.Object.html#method_notifyPropertyChange
就个人而言,我更喜欢你的最后一个解决方案,如果我必须实现它,我会做同样的事情。