Ember.js 如何在控制器中获取视图的引用

Ember.js 如何在控制器中获取视图的引用,ember.js,Ember.js,我正在使用Ember 1.0pre和Ember建议的后续版本(使用路由器)。 对于表单验证,我想在单击按钮时调用$('form').valid()方法。 所以我有以下的方法 validate: function(){ return this.$('form').valid() } 模板文件中的操作: <button type="submit" class="btn" {{action doSaveSettings this}}>Save Changes</button&g

我正在使用Ember 1.0pre和Ember建议的后续版本(使用路由器)。
对于表单验证,我想在单击按钮时调用$('form').valid()方法。 所以我有以下的方法

validate: function(){
  return this.$('form').valid()
}
模板文件中的操作:

<button type="submit" class="btn" {{action doSaveSettings this}}>Save Changes</button>
保存更改
并且doSaveSettings方法在控制器中。 如何在控制器中获取视图实例,以便调用验证方法

编辑:
在控制器中,this.view为空。我已经将{{debugger}}放在模板中,这是指
而这个.view是空的

默认操作目标已从视图更改为ember 0.9.8.1中的路由器(我相信)。要将目标设置为视图,需要像这样覆盖它

 <button type="submit" class="btn" {{action doSaveSettings target="view"}}>Save Changes</button>
保存更改

编辑:您的控制器不应该知道视图。

在余烬中,视图的目的只是我重复一遍,只是为了处理事件或创建可重用组件
我不建议这样做,因为总有一个原因说明视图不能从controller访问,遵循它是很好的,但是如果您真的想使用它,您可以使用以下两种方法:
我不知道您使用的是ember cli还是ember,但逻辑是一样的。然而,答案是针对ember cli

//Inside appname/controller/your-conroller.js

import reqdView from 'appname/views/your-view';

//Lets assume u want to call a function called validate inside view
//Add this statement inside the controller to run the validate function

reqdView.prototype.validate();

OR

var reqdViewInst = new reqdView();
reqdViewInst.validate();
如果要验证视图,请在didInsertElement内进行验证

export default Ember.View.extend({
didInsertElement:function()
{
  this.validate(); 
},
validate:function()
{
//do your validation
}
});


那么,你对验证有什么建议?我如何在不调用控制器中的自定义方法的情况下实现它(单击)另外,当我更改目标时,将在视图中调用操作,我认为这是不合适的。我听说ember团队推迟了添加验证框架,直到稍后。我将在控制器而不是视图上实现验证,因为控制器应该管理数据。然后,即使更改了验证的视图,也会保留验证。下面是一个有人已经集成到视图中的验证示例:我查看了您在上述评论中提供的要点。我理解这段代码,但它仍然没有解释我们如何确定每个字段(视图)是否有效,或者仍然存在一些验证问题。在控制器中。我希望你明白我的意思。实际上,经过进一步思考,我可能会将模型上的验证实现为一个返回一系列错误的函数。因此,我将有一个针对路由器的save操作,在该操作中,我将调用controller.save函数,然后调用model.validate函数。如果返回错误(数组),我将在视图显示的控制器上设置一个errors属性,并使函数返回false。如果controller.save的返回值为false,我将中止保存操作。
export default Ember.View.extend({
eventManager: Ember.Object.create({
    didInsertElement:function(event, view)
    {
      view.validate(); 
    }
  }),

    validate:function()
    {
    //do your validation
    }
    });