environments
以下のコードは、を介してテンプレート内のデータにアクセスできるという点で、期待どおりに機能しますcontent.dev.name
。
ただし、AJAXリクエストを介してこのデータを入力するのに苦労しています。
以下のコントローラーのような構造を返す REST API が 1 つあります。アプリのロード時に一度呼び出す必要があります。
ここに私の作業コードがあります:
コントローラ
App.EnvironmentsController = Ember.Controller.extend();
App.EnvironmentsController.reopenClass({
find: function(){
return {dev: {key: 'dev', name: 'Development'}, prod: {key: 'prod', name: 'Production'}};
return this.content;
},
});
App.EnvironmentsView = Ember.View.extend({
templateName: 'environments'
});
ルート
...
router.get('applicationController').connectOutlet('environments', App.EnvironmentsController.find());
...
テンプレート
<script type="text/x-handlebars" data-template-name="environments">
<ul id="env-menu">
{{#with content}}
<li>{{dev.name}}</li>
<li>{{prod.name}}</li>
{{/with}}
</ul>
</script>
そして、これはAJAXを使用したコントローラーで、同じ形式のテンプレートにデータを渡すことができません。
注: response.data.environments 自体が、上記の手動でコーディングしたオブジェクトと同じ構造を返していることはわかっています。
App.EnvironmentsController = Ember.Controller.extend();
App.EnvironmentsController.reopenClass({
environments: {},
find: function(){
$.ajax({
url: 'http://localhost:3000/environments',
dataType: 'json',
context: this,
success: function(response){
this.environments = response.data.environments;
}
});
return this.environments;
},
});
App.EnvironmentsView = Ember.View.extend({
templateName: 'environments'
});
コントローラーが配列コントローラーで、データが配列として返されていたときに、同様の作業があったことに注意してください。これをオブジェクトで具体的に機能させる方法を知る必要があります。
更新: 質問からの詳細情報
ここにフィドルがあります:http://jsfiddle.net/coder1/csvZX/
私は別のパターンにオープンです。オブジェクトをフェッチしてコントローラーを介して送信することに頭を悩ませようとしています。
これは非常に素晴らしいチュートリアルです ( http://trek.github.com/ ) 私が始めたもので、単一のオブジェクトで作業している場合ではなく、配列コントローラーでこれを機能させることができます。