2013-01-03 114 views
0

好的,閱讀所有更新的指南,仍然無法弄清楚爲什麼我的控制器操作未從視圖中調用。我燼應用程序有插入application.handlebars這樣的導航視圖:Ember - 從視圖中未找到控制器操作

{{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> 

任何想法?提前致謝。

回答

1

我認爲第一個錯誤是使用,因爲NavigationController沒有注入到它。

嘗試使用新的{{render}}助手,如{{render navigation}}。它將查找NavigationView,NavigationController和導航模板,並將它們連接在一起。

然後,{{行動}}幫手現在行爲的說明文件另有說明:http://emberjs.com/guides/templates/actions/

下面是一個簡單的例子,(只是錯過使用{{呈現}} http://jsfiddle.net/JLHuG/40/

這裏我定義了當前路由中的動作,但是如果你在控制器中定義它(取消註釋),這將由控制器處理

0

指定{{action}}助手中的目標選項來告訴哪個對象應接收方法調用。例如:

{{行動「navAction」目標=「控制器」}}

如果目標選項是未指定的,那麼它會指向controller.target其通常被設定爲屬性路由器。但是,目標可以像這樣設置到控制器本身;

App.NavigationController = Ember.ObjectController.extend({

 init : function(){ 
     this._super(); 
     this.set("target", this); 
    }, 

navAction: function() { 
console.log('navAction'); 

}});

您可以參考下面的要點,明確解釋了有關{{行動}}幫手深度: https://gist.github.com/3595069

+0

感謝您的建議;不幸的是,在init中設置目標不起作用。使用最新的版本,如果這是任何結果。 – user1938736

+0

嗯,我很確定現在,def ault動作的目標是控制器...如果它不起作用,這應該是一個錯誤 –