1

好的,阅读所有更新的指南,但仍然无法弄清楚为什么我的控制器操作没有从视图中调用。我的 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>

有任何想法吗?提前致谢。

4

3 回答 3

2

我认为第一个错误是使用{{view App.NavigationView}},因为 NavigationController 没有注入其中。

尝试使用新的 {{render}} 助手,例如 {{render navigation}}。它将同时查找 NavigationView、NavigationController、模板“导航”,并且应该连接在一起。

然后,{{action}} 助手现在按照文档中的说明进行操作:http: //emberjs.com/guides/templates/actions/

这是一个简短的例子,(只是错过了使用 {{render}} http://jsfiddle.net/JLHuG/40/

这里我在当前路由中定义了动作,但是如果你在控制器中定义(取消注释它),这将由控制器处理

于 2013-01-03T16:33:21.473 回答
1

也许看看下面的帖子: {{action}} with a click event doesn't trigger the function in the v2 Ember router

它谈到了使用一个名为 {{linkTo}} 的新助手

于 2013-01-03T10:45:14.570 回答
0

在 {{action}} 帮助器中指定目标选项以告知哪个对象应该接收方法调用。例如:

{{动作“navAction”目标=“控制器”}}

如果目标选项未指定,那么它将指向通常设置为路由器的 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

于 2013-01-03T05:57:12.093 回答