【问题标题】:Ember data from a rest url not rendering来自休息 url 的 Ember 数据未呈现
【发布时间】:2014-04-14 16:29:00
【问题描述】:

我第一次尝试使用 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>

页面中没有打印名称。

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

【问题讨论】:

  • this.store.find('restaurant') 是否返回多个餐厅模型实例?
  • 最初我以 {"restaurant" : { "name" : "SomeName", ...}} 的形式返回一家餐厅,但它不起作用。所以我认为它可能期待很多并开始返回 {"restaurants" : [{"name" : "SomeName:,...}]}
  • 我尝试了其他方法。我没有使用 owner_id,而是使用了对象的 id 并使用了 this.store.find('restaurant', id) 然后名称就来了。虽然从 REST API 中返回的这两种情况的数据是相同的,但 ember 数据似乎期望不同的结果?

标签: ember.js ember-data


【解决方案1】:

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

return res.get('firstObject');

【讨论】:

  • 我试过这个,我得到的值是空的。返回的响应虽然看起来正确,但 ember 似乎无法理解。这可能是问题所在。我尝试了一个非常基本的情况,使用 ArrayController 并返回列表,它正在工作。
【解决方案2】:

终于明白了。感谢您的指点,我必须做 res.get('firstObject'),但不是在模型回调中,而是在 setupController 回调中。似乎如果我像我一样使用查询,它将得到一个不能分配给对象控制器的承诺数组。此外,由于它是一个承诺,因此在承诺履行之前,不会调用 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'));
}

});

现在它正在工作。发布它以便它可以帮助其他人前进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-01
    • 2018-02-01
    • 1970-01-01
    • 2023-03-07
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 2016-11-19
    相关资源
    最近更新 更多