【问题标题】:In Ember.js, with ember-validations, how do I trigger model-size validations from my controller?在 Ember.js 中,使用 ember-validations,我如何从我的控制器触发模型大小验证?
【发布时间】:2026-01-06 20:05:02
【问题描述】:

我正在试用 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();
  }
});

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

我不明白的是如何从控制器连接回模型对象以运行.validate()。似乎我应该能够在控制器的提交方法中做一些事情,比如this.get("model").validate(),但这不起作用。我应该如何进行这项工作?

【问题讨论】:

    标签: ember.js


    【解决方案1】:

    请试试这个

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

    【讨论】:

      【解决方案2】:

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

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

      请参阅here 以获得伪工作演示。

      希望对你有帮助。

      【讨论】:

        最近更新 更多