2013-04-09 3 views
0

Я пытаюсь загрузить несколько любимых репозиториев для Travis-CI Mobile Я пытаюсь собрать hereнайти несколько записей по идентификатору с помощью Ember-данных

Что у меня есть массив идентификаторов хранилища, как это :

var favoriteRepos = ["668498","557554","7934","207993"]; 

Как мы могли бы идти о загрузке всех этих сделок РЕПО с пересмотром уголек-данных 12, the Travis custom RESTAdapter и Travis API?

Это то, что я безуспешно пытался до сих пор:

// This is in the repo model - https://github.com/floydpink/Travis-CI-www/blob/master/js/app/models/Repo.js 
Repo.reopenClass({ 
    favorites  : function (favorites) { 
    // favorites would be an array of repo-ids like ["451069","538603"] 
    var faves = Ember.ArrayProxy.create({ 
     isLoadedBinding : 'content.isLoaded', 
     content   : Ember.A([]) 
    }); 
    favorites.forEach(function (favorite) { 
     faves.pushObject(Repo.find(favorite)); 
    }); 
    return faves; 
    } 
}); 

// And in FavoritesController 
this.set('content', Repo.favorites(favoriteRepos)); 

Так общий вопрос, как же нам идти о загрузке несколько различных записей по идентификатору, используя уголек-данных?

ответ

4

Вы должны быть в состоянии просто сделать:

Repo.reopenClass({ 
    favorites  : function (favorites) { 
    // favorites would be an array of repo-ids like ["451069","538603"] 
    return Ember.ArrayProxy.createWithMixins({ 
     content: favorites.map(function(id) { return Repo.find(id); }), 
     isLoaded: function() { 
     return this.everyProperty('isLoaded'); 
     }.property('@each.isLoaded'); 
    }); 
    } 
}); 
+0

Возможно, это что-то еще в моей настройке, но это не работает. Хотя, если я просто вернусь к Repo.find(), он работает. –

+0

Я не уверен, что вы подразумеваете под словом «не работает». Если 'Repo.find' работает, это тоже сработает. Конечно, вы должны помнить, что объекты не будут заселены немедленно. Если вы не задали правильные вопросы, чтобы справиться с этим в другом месте, это может быть вашей проблемой. –

+2

Я обновил свой ответ, чтобы включить поддержку 'isLoaded'. Я уверен, что код должен работать, хотя я его не тестировал. –

1

Если шаблон рули выглядит следующим образом:

{{#if isLoaded}} 
    {{#each controller}} 
    ... 
    {{/each}} 
{{/if}} 

Тогда это не будет работать, потому что вы никогда не ставили isLoaded в true в массиве , В зависимости от реализации данных вы используете, вы могли бы сделать что-то вроде этого:

Repo.reopenClass({ 
    favorites: function (ids) { 
    // ids would be an array of repo-ids like ["451069","538603"] 
    var loadCount = 0; 
    var favorites = Em.A(); 
    ids.forEach(function(id) { 
     var favorite = Repo.find(id); 
     favorites.pushObject(favorite); 
     favorites.then(function() { 
     loadCount++; 
     if (loadCount == ids.length) { 
      favorites.set('isLoaded', true); 
     } 
     }); 
    }); 
    return favorites; 
    } 
}); 

Свойство isLoaded устанавливается истина, когда все фавориты были загружены с сервера.

+0

Получение ошибки 'Object [object Object] не имеет метода' then'' в строке 'favorite.then()'. –

 Смежные вопросы

  • Нет связанных вопросов^_^