在Ember.js中,使用ember-validations,如何从控制器触发模型大小验证?

时间:2013-08-02 22:51:52

标签: ember.js

我正在试用DockYard中的ember-validations mixin。我有一个看起来像这样的NewUser对象:

App.NewUser = Ember.Object.extend(Ember.Validations.Mixin, {
  name: null,
  email: null,
  password: null,
  password_confirmation: null,

  validations: {
    name: {
      presence: true
    }
  },

  watchChanges: function() {
    // Live validations...
    this.validate();
  }.observes("name", "email", "password", "password_confirmation")
});

我有一个控制器,其中包含submit方法:

App.JoinController = Ember.ObjectController.extend({
  submit: function() {
    // Run validations again
    // Send to server if okay
    this.get("model").validate();
  }
});

将模型链接到视图的路线:

App.JoinRoute = Ember.Route.extend({
  model: function() {
    return App.NewUser.create();
  }
});

(这也是将提交方法转发给控制器的视图)

我不明白的是如何从Controller连接回模型对象以运行.validate()。看起来我应该能够在控制器的提交方法中执行某些操作,例如this.get("model").validate(),但这不起作用。我该怎么做才能做到这一点?

2 个答案:

答案 0 :(得分:1)

请试试这个

App.JoinController = Ember.ObjectController.extend({
   submit: function() {
      this.validate().then(function(){
         //if valid do actions
      }).catch(function(){
        //errors
     })
   }
});

答案 1 :(得分:0)

我想你应该尝试访问控制器content属性而不是model,这样的东西应该可以工作:

App.JoinController = Ember.ObjectController.extend({
  submit: function() {
   // Run validations again
   // Send to server if okay
   this.get("content").validate();
  }
});

有关伪工作演示,请参阅here

希望它有所帮助。