好的,阅读所有更新的指南,仍然无法弄清楚为什么我的控制器操作没有从视图中调用。我的ember应用程序在application.handlebars中插入了导航视图,如下所示:
{{view App.NavigationView}}
{{outlet}}
导航控制器如下所示:
App.NavigationController = Ember.ObjectController.extend({
navAction: function() {
console.log('navAction');
}
});
导航模板:
<ul class="nav">
<li>{{#linkTo "dashboard"}}Dashboard{{/linkTo}}</li>
<li>{{#linkTo "contacts"}}Contacts{{/linkTo}}</li>
<li>{{#linkTo "campaigns"}}Campaigns{{/linkTo}}</li>
<li>{{#linkTo "transactions"}}Transactions{{/linkTo}}</li>
<li><a {{action "navAction"}}>navAction</a></li>
</ul>
有什么想法吗?提前谢谢。
答案 0 :(得分:1)
也许看看以下帖子: {{action}} with a click event doesn't trigger the function in the v2 Ember router
它讨论了使用名为{{linkTo}}
的新助手答案 1 :(得分:1)
我认为第一个错误是使用{{view App.NavigationView}}
,因为NavigationController没有注入其中。
尝试使用新的{{render}}助手,例如{{render navigation}}。它将查找NavigationView,NavigationController,模板“导航”,并且应该连接在一起。
然后,{{action}}助手现在的行为与文档中所述相同:http://emberjs.com/guides/templates/actions/
这是一个简短的例子,(只是错过了使用{{render}} http://jsfiddle.net/JLHuG/40/
这里我定义了当前路线中的动作,但如果你在控制器中定义它(取消注释),这将由控制器处理
答案 2 :(得分:0)
在{{action}} helper中指定目标选项,告诉哪个对象应该接收方法调用。例如:
{{action&#34; navAction&#34;目标=&#34;控制器&#34;}}
如果未指定目标选项,则它将指向通常设置为路由器的controller.target属性。但是,目标可以像这样设置到控制器本身;
App.NavigationController = Ember.ObjectController.extend({
init : function(){ this._super(); this.set("target", this); }, navAction: function() { console.log('navAction');
}});
您可以参考下面的要点,该要点清楚地解释了{{action}}帮助的深度: https://gist.github.com/3595069