我刚开始学习Ember.js(买PeepCode截屏),并且正在学习从它比较顺利,但在尝试写我的第一灰烬应用程序时,遇到了一个问题。
这里的(嵌套)路由映射:
App.Router.map(function () {
this.resource('bases', { path: '/' }, function () {
this.resource('base', { path: ':base_id' }, function () {
this.resource('places', function () {
this.resource('place', { path: ':place_id' });
});
});
});
});
这使得像这样的网址:domain.com/#/yokota-ab-japan/places/4c806eabd92ea093ea2e3872
yokota-ab-japan
是碱(一个空军基地在日本)的id 4c806eabd92ea093ea2e3872
上四方场地的id
当地方的路线被击中,我设置与向四方API的调用数据,遍历JSON创建App.Place对象的数组,并返回数组。
App.PlacesRoute = Ember.Route.extend({
model: function () {
var placesData = Ember.A();
$.getJSON('https://api.foursquare.com/v2/venues/search?ll=35.744771,139.349456&query=ramen&client_id=nnn&client_secret=nnn&v=20120101',
function (data) {
$.each(data.response.venues, function (i, venues) {
placesData.addObject(App.Place.create({ id: venues.id, name: venues.name, lat: venues.location.lat, lng: venues.location.lng }));
});
});
return placesData;
}
});
这似乎运作良好。 我显示使用此模板的placesData数组:
<script type="text/x-handlebars" data-template-name="places">
<div>
{{#each place in controller}}
{{#linkTo 'place' place}}
{{place.name}}
{{/linkTo}}
{{/each}}
</div>
{{outlet}}
</script>
该linkTo
链接到各个地方,在这里我想显示某个地点的更多细节。 下面是我的路线设置拉数据对一个地方,填充一个App.Place对象,并返回它:
App.PlaceRoute = Ember.Route.extend({
model: function (params) {
console.log('place route called');
var place;
$.getJSON('https://api.foursquare.com/v2/venues/' + params.place_id + '?client_id=nnn&client_secret=nnn',
function (data) {
var v = data.response.venue;
place = App.Place.create({ id: v.id, name: v.name, lat: v.location.lat, lng: v.location.lng });
});
return place;
}
});
我的问题是, PlaceRoute
当用户点击一个链接,它不会叫,但是当页面被这条航线上刷新它被调用。
按照PeepCode Ember.js截屏(在〜12:25到视频),它指出:“很少控制器永远做数据呼叫,路由对象搞定”,所以我觉得我把我的Ajax调用的是正确的路线(我见过这么多的教程别共在网上,但由于Peepcode与Ember.js创造者协商,我用它去作为我的主要学习源)。
如果这是不正确,或者可以做的更好,请让我知道。