私の Ember アプリでは、Discourse の共同創設者のブログ投稿http://eviltrout.com/2013/02/27/adding-to-discourse-part-1.htmlからコピーした ajax 呼び出しを使用して、すべてのレストランのリストを取得します。
App.Restaurant.reopenClass({
findAll: function() {
return $.getJSON("restaurants").then(
function(response) {
var links = Em.A();
response.restaurants.map(function (attrs) {
links.pushObject(App.Restaurant.create(attrs));
});
return links;
}
);
},
上記の findAll を呼び出してアプリケーション テンプレートにレンダリングするレストラン ルートを設定しました。
App.RestaurantsRoute = Ember.Route.extend({
model: function(params) {
return(App.Restaurant.findAll(params));
},
renderTemplate: function() {
this.render('restaurants', {into: 'application'});
}
});
restaurants
レストランは、個々のレストランへのリンクとともに、このようにテンプレートとして表示されます。restaurant
テンプレも入れてる
<script type="text/x-handlebars" id="restaurants">
<div class='span4'>
{{#each item in model}}
<li> {{#link-to 'restaurant' item}}
{{ item.name }}
{{/link-to }}</li>
{{/each}}
</ul>
</div>
<div class="span4 offset4">
{{ outlet}}
</div>
</script>
Emberルーターでは、このように親子ルートを設定しています
this.resource("restaurants", function(){
this.resource("restaurant", { path: ':restaurant_id'});
});
したがって、レストラン リストの特定のレストランへのリンクをクリックすると、このrestaurant
テンプレートが(複数outlet
の) テンプレートで定義された場所に挿入されることを期待しています。restaurantS
<script type="text/x-handlebars" id="restaurant">
this text is getting rendered
{{ item }} //item nor item.name are getting rendered
</script>
このレストラン テンプレートはレンダリングされていますが、 のデータはitem
表示されていません。
{{#link-to 'restaurant' item}}
リストをクリックすると、item
そのレストランを表します。
findAll
このセットアップでは、Ember はその特定のアイテムを取得するために別の ajax 呼び出しを行う必要がありますか?呼び出しから既に読み込まれていますか?
個々のレストランを照会する必要がある場合に備えて (再び)、個々のレストランの新しいルートを作成しました
App.RestaurantRoute = Ember.Route.extend({
model: function(params) {
console.log(params);
console.log('resto');
return App.Restaurant.findItem(params);
}
});
Restaurant モデルの findItem
App.Restaurant.reopenClass({
findItem: function(){
console.log('is this getting called? No...');
return 'blah'
}
しかし、それらの console.logs はどれも呼び出されていません。
Ember スターター ビデオhttps://www.youtube.com/watch?v=1QHrlFlaXdIでは、Tom Dale がリストからブログ投稿をクリックすると、定義されたテンプレートに投稿が表示されます。投稿テンプレート内にルート (私が行ったように) と {{outlet}} を設定して、投稿を受け取ります。
この状況で同じことがうまくいかない理由がわかりますか?