更新:FirstObject是未定义的emberjs数组

时间:2014-05-14 05:48:47

标签: ember.js

我需要获取旋转木马的firstObject并将其设置为活动状态 这就是我设置轮播属性的方式

JSBIN代码

App.ApplicationController = Ember.ArrayController.extend({
    content: [],
    carouselData: function () {
        var categories = this.get('content');
        var products = Em.A([]);
        categories.forEach(function (category) {
            category.get('items').then(function (data) {
                data.forEach(function (product) {
                    products.addObject(product);
                });
            });
        });
        console.log(products);
        console.log(products.get('firstObject'));
        return products;
    }.property('content')
});

更新

@ppcano感谢您的解释:)。我得到了你要我做的事。仅在hasMany已满足时返回模型。然后使用computed属性将它们保存在carouselData属性中。但可能是我在实现中遗漏了一些内容cdata.get('firstObject')在App.Caroure中返回了更新jsbin UPDATED JSBIN的承诺

更新2 已解决enter link description here

1 个答案:

答案 0 :(得分:3)

您的问题是计算属性在异步执行中不起作用。

category.get('items').then(function (data)

在将任何数据推送到产品之前,会返回products变量,因为必须请求这些项目。

当您确保在计算属性时加载项目时,可以解决此问题。您可以在路线模型中执行以下操作:

model: function(){

    return this.store.find('facture').then(function(factures){

      var productPromises = factures.getEach('items');

      return Ember.RSVP.all(productPromises).then(function(products) {
         return factures;
      }); 

    });

}

然后,您可以将CP定义为:

  carouselData: function(){

    var result = Em.A([]);

    this.get('content').getEach('items').forEach(function(items){
      result.pushObjects(items.toArray());
    });

   return result;

 }.property('content.@each.items.@each')