Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ember.js 使用余烬数据按id查找一些记录_Ember.js_Ember Data_Travis Ci - Fatal编程技术网

Ember.js 使用余烬数据按id查找一些记录

Ember.js 使用余烬数据按id查找一些记录,ember.js,ember-data,travis-ci,Ember.js,Ember Data,Travis Ci,我正在尝试为我正在尝试组装的Travis CI Mobile加载一些最喜欢的存储库 我拥有的是一组存储库ID,如下所示: var favoriteRepos = ["668498","557554","7934","207993"]; {{#if isLoaded}} {{#each controller}} ... {{/each}} {{/if}} Repo.reopenClass({ favorites: function (ids) { // ids wo

我正在尝试为我正在尝试组装的Travis CI Mobile加载一些最喜欢的存储库

我拥有的是一组存储库ID,如下所示:

var favoriteRepos = ["668498","557554","7934","207993"];
{{#if isLoaded}}
  {{#each controller}}
    ...
  {{/each}}
{{/if}}
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;
  }
});
我们怎样才能开始加载所有这些回购协议与余烬数据修订版12,以及

这是迄今为止我尝试过但未成功的方法:

// 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));

因此,一般的问题是,我们如何使用余烬数据按id加载一些不同的记录?

您应该能够做到:

Repo.class({
收藏夹:功能(收藏夹){
//最受欢迎的是一组回购ID,如[“451069”、“538603”]
返回Ember.ArrayProxy.createWithMixins({
内容:favorites.map(函数(id){return Repo.find(id);}),
isLoaded:函数(){
返回此.everyProperty('isLoaded');
}.property(“@each.isLoaded”);
});
}
});

您应该能够:

Repo.class({
收藏夹:功能(收藏夹){
//最受欢迎的是一组回购ID,如[“451069”、“538603”]
返回Ember.ArrayProxy.createWithMixins({
内容:favorites.map(函数(id){return Repo.find(id);}),
isLoaded:函数(){
返回此.everyProperty('isLoaded');
}.property(“@each.isLoaded”);
});
}
});

如果您的把手模板如下所示:

var favoriteRepos = ["668498","557554","7934","207993"];
{{#if isLoaded}}
  {{#each controller}}
    ...
  {{/each}}
{{/if}}
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
设置为
true
。根据您使用的数据实现,您可以执行以下操作:

var favoriteRepos = ["668498","557554","7934","207993"];
{{#if isLoaded}}
  {{#each controller}}
    ...
  {{/each}}
{{/if}}
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
属性将设置为true。

如果您的把手模板如下所示:

var favoriteRepos = ["668498","557554","7934","207993"];
{{#if isLoaded}}
  {{#each controller}}
    ...
  {{/each}}
{{/if}}
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
设置为
true
。根据您使用的数据实现,您可以执行以下操作:

var favoriteRepos = ["668498","557554","7934","207993"];
{{#if isLoaded}}
  {{#each controller}}
    ...
  {{/each}}
{{/if}}
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
属性设置为true。

可能是我的设置中的其他内容,但这不起作用。尽管如此,如果我只做
返回Repo.find()
它确实有效。我不确定“不工作”是什么意思。如果
Repo.find
起作用,这也会起作用。当然,您必须记住,不会立即填充对象。如果您在其他地方没有正确设置来处理此问题,这可能是您的问题。我已更新了我的答案,以包括
isLoaded
支持。虽然我还没有测试过,但我很确定代码应该可以运行。谢谢。需要先扩展然后创建ArrayProxy,因为出现错误:
Ember.Object.create不再支持定义计算属性
。看起来您的适配器非常支持
findMany
。可能是我的设置中的其他内容,但这不起作用。尽管如此,如果我只做
返回Repo.find()
它确实有效。我不确定“不工作”是什么意思。如果
Repo.find
起作用,这也会起作用。当然,您必须记住,不会立即填充对象。如果您在其他地方没有正确设置来处理此问题,这可能是您的问题。我已更新了我的答案,以包括
isLoaded
支持。虽然我还没有测试过,但我很确定代码应该可以运行。谢谢。需要先扩展然后创建ArrayProxy,因为出现错误:
Ember.Object.create不再支持定义计算属性
。看起来你的适配器很酷,它支持
findMany
。获取错误
对象[Object Object]在
收藏夹中没有方法'then'
。然后()
行。获取错误
对象[Object Object]在
收藏夹中没有方法'then'
行。