登录失败后灰烬焦点输入?

时间:2014-01-20 00:02:16

标签: ember.js

在开始这个问题之前,我发现了类似于我正在寻找的东西: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);
}

如果有人有更好的方法,更简单,更容易,请在下面发布,我会接受它作为答案。

1 个答案:

答案 0 :(得分:1)

您是否尝试使用以下命令将error属性显式标记为已更改:notifyPropertyChange? http://emberjs.com/api/classes/Ember.Object.html#method_notifyPropertyChange

就个人而言,我更喜欢你的最后一个解决方案,如果我必须实现它,我会做同样的事情。