来自其他URL的Ember数据无法呈现

时间:2014-04-14 16:29:01

标签: ember.js ember-data

我正在尝试使用RESTful后端首次创建Ember.js应用程序。我一直在使用从我的服务器渲染的HTML,因此我是ember的新手。 我有一个基于所有者ID获取餐馆的查询,然后在标题栏中显示该名称。

LiveKitchen.RestaurantController = Ember.ObjectController.extend({
   needs : 'login'
});

LiveKitchen.RestaurantRoute = Ember.Route.extend({
model: function() {
    console.log(this.controllerFor('login').get('user_id'));
    console.log('Fetching Restaurants ' + this.store.find('restaurant', {owner_id : this.controllerFor('login').get('user_id')}));
    var res =  this.store.find('restaurant', {owner_id : this.controllerFor('login').get('user_id')});
    // restaurant.tables = this.store.find('table', {restaurant_id : restaurant.mongo_id});
    console.log('Restaurant ' + res);
    return res.objectAt(0);
    // return restaurant;
}
});

我已使用调试器验证了响应,并看到正确返回了json数据。不过我的模板

<script type="text/x-handlebars" data-template-name="restaurant">
     <small>
         <i class="icon-leaf"></i>
         {{name}}
         </small>
</script>

没有在页面中打印的名称。

你能帮我解决一下我如何调试它并找出数据未呈现的原因吗?由于没有错误,我无法找出接下来要采取的步骤。

2 个答案:

答案 0 :(得分:0)

问题可能是使用objectAt(0),尝试这样做:

return res.get('firstObject');

答案 1 :(得分:0)

终于明白了。感谢您的指针,我不得不做res.get('firstObject'),但不是在模型回调中,而是在setupController回调中。看来如果我像我一样使用查询,它将获得一个无法分配给对象控制器的promise数组。此外,由于它是一个承诺,在履行承诺之前,不会调用setupController。所以以下面的方式使用setupController回调

LiveKitchen.RestaurantRoute = Ember.Route.extend({
model: function() {
    console.log(this.controllerFor('login').get('restaurant_id'));
    console.log('Fetching Restaurants ');
    //var res =  this.store.find('restaurant', this.controllerFor('login').get('restaurant_id'));
    var res = this.store.find('restaurant', {"owner_id" : this.controllerFor('login').get('user_id')});
    console.log('Restaurant ' + res);
    return res;
},
setupController : function(controller, model) {
    console.log('Incoming ' + model.get('firstObject').get('name'));
    controller.set('model', model.get('firstObject'));
}

});

现在它正在运作。发布它可以帮助其他人继续前进。