我正在使用Ember 1.0pre并遵循Ember建议的application structure(使用路由器) 对于表单验证,我想在按钮单击上调用 $('form')。valid()方法。 所以我在视图中有以下方法
validate: function(){
return this.$('form').valid()
}
模板文件中的操作:
<button type="submit" class="btn" {{action doSaveSettings this}}>Save Changes</button>
和 doSaveSettings 方法在Controller中。 如何在控制器中获取视图实例,以便调用validate方法?
修改
在控制器中,this.view为null。我已将{{debugger}}放在模板中,这是指
&LT; App.XyzController:ember1062&GT;并且this.view为null。
答案 0 :(得分:1)
在ember 0.9.8.1(我相信)中,操作的默认目标已从视图更改为路由器。要将目标设置为视图,您需要像这样覆盖它
<button type="submit" class="btn" {{action doSaveSettings target="view"}}>Save Changes</button>
编辑:你的控制器不应该知道视图。
答案 1 :(得分: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
}
});
OR
export default Ember.View.extend({
eventManager: Ember.Object.create({
didInsertElement:function(event, view)
{
view.validate();
}
}),
validate:function()
{
//do your validation
}
});