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
余烬afterRender组件/非异步AJAX_Ajax_Ember.js - Fatal编程技术网

余烬afterRender组件/非异步AJAX

余烬afterRender组件/非异步AJAX,ajax,ember.js,Ajax,Ember.js,设想一个呈现HTML表的组件。表中的数据来自远程JSON 组件的另一部分依赖于完全呈现的HTML表(使用JSON数据) 在组件的init事件中,我检索JSON并设置组件用于呈现表的数据 我不能使用afterRender钩子来进一步处理该表,因为当触发afterRender时,该表存在,但没有JSON数据 我注意到组件外部的afterRender钩子起作用(表已完全呈现),但随后我会通过运行属于组件内部的代码来破坏封装 我可以同步获取JSON,或者在一个承诺中得到一个承诺?我怎么做后者?我的意思是

设想一个呈现HTML表的组件。表中的数据来自远程JSON

组件的另一部分依赖于完全呈现的HTML表(使用JSON数据)

在组件的
init
事件中,我检索JSON并设置组件用于呈现表的数据

我不能使用
afterRender
钩子来进一步处理该表,因为当触发
afterRender
时,该表存在,但没有JSON数据

我注意到组件外部的
afterRender
钩子起作用(表已完全呈现),但随后我会通过运行属于组件内部的代码来破坏封装

我可以同步获取JSON,或者在一个承诺中得到一个承诺?我怎么做后者?我的意思是,在组件的
init
hook上,如何创建一个只在返回其内部的承诺时才返回的承诺


或者我怎么才能用余烬的方式来实现这一点呢?

你完全可以把你的承诺挂在一边

var items = [];

this.set('items', items);

$.getJSON('/colors').then(function(results){
  results.forEach(function(item){
    item.color +=" is pretty";
  });
  return results;
}).then(function(prettyResults){
  prettyResults.forEach(function(item){
    items.pushObject(item);
  });
});

超深奥的承诺

new Ember.RSVP.Promise(function(resolve){
  resolve($.getJSON('/colors'));
}).then(function(results){   // this isn't hit til the json is returned
  results.forEach(function(item){
    item.color +=" is pretty";
  });
  return new Ember.RSVP.Promise(function(resolve){
    Ember.run.later(function(){
      resolve(results);
    }, 4000);
  });

}).then(function(prettyResults){ // this isn't hit til the 4 second resolve is done
  prettyResults.forEach(function(item){
    items.pushObject(item);
  });
});

很有道理,谢谢你教了我一些我需要的东西:)不过,我想我刚刚找到了一个更好的方法来解决这个特殊的问题。如果我“观察”HTML表所依赖的属性,那么在观察者内部,该表将完全呈现,因此我可以执行我需要的操作!亲爱的。伊凡听状态模型加载是做这件事的方法(DS模型加载),请考虑回答你自己的问题。还可以看看这篇文章。