2013-12-19 8 views
9

RouteControllerからテンプレートヘルパーに値を渡す:流星 - 次のように私は、ルートコントローラを持っている場合はどのように

add_departmentController = RouteController.extend({ 
    before: function(){ 
     var a = this.params._id; 
     var b = 'abc'; 
    } 
}); 

私はテンプレート

Template.add_department.helpers({ 
    SomeProperty: function() { 
     //Here I need access to a or b from above 
     //Would also be nice to access 'this' directly eg. this.params 
    }, 
}); 
ためのヘルパーに、これらの値にアクセスするにはどうすればよいです

答えて

19

コントローラに

add_departmentController = RouteController.extend({ 
    template: 'departmentTemplate', 
    data: function(){ 
     return {_id: this.params._id}; 
    } 
}); 

この「注入」データFUNCTの返されたオブジェクトをデータ関数を使用しますイオンをテンプレートにデータコンテキストとして追加します。

[EDIT]

テンプレート: {{_idが}}データコンテキストから直接来て、{{idFromHelper}}テンプレートヘルパー関数から_idを返します。

<template name="departmentTemplate"> 

    {{_id}} 

    {{idFromHelper}} 

</template> 

ヘルパー:

Template.addDepartment.helpers({ 
    idFromHelper: function() { 
     return this._id; 
    } 
}) 
+0

私は、コントローラ内のデータ機能について知っているが、私はドン」ヘルパー関数またはテンプレートでアクセスする方法を知っています - 両方でデータオブジェクトを使用/アクセスする方法の例がありますか? –

+0

ちょっと@A_L私は答えを編集し、それが助けてくれることを願っています。 Handlebars-Templateのデータコンテキストとテンプレートオブジェクト自体にデータが適切であるため、実際は簡単です。だからあなたは 'this._id'を使ってそれを参照できるはずです。これがあなたにとってはうまくいかない場合(しかしそれはすべきです)、あなたは 'this.data._id'で参照できるかどうかチェックしたいと思っています。 – DerMambo

+1

これは完璧な意味を持っています、 –

13

あなたは、現在のコントローラにアクセスするクライアントコード内Routerオブジェクトを使用することができます。

Template.addDepartment.helpers({ 
    someHelper: function() { 
    var controller = Router.current(); 
    // return the _id parameter or whatever 
    return controller.params._id; 
    } 
}); 
+0

興味深い.... –

関連する問題