3

我正在使用 Ember 1.0pre 并遵循 Ember 建议的应用程序结构(使用路由器)。
对于表单验证,我想在按钮单击时调用$('form').valid()方法。所以我认为我有以下方法

validate: function(){
  return this.$('form').valid()
}

模板文件中的操作:

<button type="submit" class="btn" {{action doSaveSettings this}}>Save Changes</button>

并且doSaveSettings方法在 Controller 中。如何在控制器中获取视图实例,以调用验证方法?

编辑:
在控制器中, this.view 为空。我已将 {{debugger}} 放入模板中,这指的是 <App.XyzController:ember1062> 并且 this.view 为空。

4

2 回答 2

1

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

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

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

于 2012-08-29T15:20:30.897 回答
0

在 ember 中,视图的目的只是我重复只是为了处理事件或创建可重用的组件
我不建议这样做,因为总是有一个原因为什么视图不应该从控制器访问并且它很好地遵循它,但是如果您真的想使用它,您可以执行以下两种方式:
我不知道您使用的是 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
}
});

或者

export default Ember.View.extend({
eventManager: Ember.Object.create({
    didInsertElement:function(event, view)
    {
      view.validate(); 
    }
  }),

    validate:function()
    {
    //do your validation
    }
    });
于 2014-08-12T08:42:47.497 回答