我有一个带有简单属性的Ember Controller,该属性应该从服务器中获取文件列表。服务器端所有好,数据正在返回并在控制台上显示。
在控制器中我有:
imgFiles: new Ember.RSVP.Promise(function(resolve, reject) {
Ember.$.ajax(ENV.apiHost+'/'+ENV.apiNamespace +'/folderwalk/newsimg', {
success: function(response) {
// console.log(response);
resolve(response);
},
error: function(reason) {
reject(reason);
}
});
}),
在模板中:
{{imgFiles}} // shows [object Object]
{{#each imgFiles as |file|}} // doesn't loop at all
x {{file}}
{{/each}}
我已经尝试了我能想到的所有变体。封装在功能中并返回承诺,返回成功的响应,...
我仍然无法承诺返回实际数据。
是的,当您记录响应时,您将获得整个有效负载。但是,Ember不知道已从服务器返回的新数据(以前是Promise
(。您必须使用set
明确通知Ember有关新数据的信息。
imgList: Ember.computed({
get() {
return new Ember.RSVP.Promise((resolve, reject) => {
$.ajax('https://jsonplaceholder.typicode.com/photos').then((data, textStatus, jqXHR) => {
console.log(data);
let firstHunPhotos = data.slice(0,100);
this.set('imgList', firstHunPhotos); // <- set the new data | set the entire data if you want!
});
});
},
set(key, value) {
return value // <- don't forget the setter!
}
})
请参考这个twiddle。https://ember-twiddle.com/25D11C4C4650C18183DF3595CA21F9C3?numcolumns = 2&amp; ampenfiles = templates.application.hbs,controllers.applollers.application.application.application.js
通常这些来自模型。渲染将延迟,直到模型解决。
您的情况可以以不同的方式实现。获取Mount/Init事件上的详细信息,并将解析值设置为属性,并将该属性与视图绑定。该值更新后,视图将重新渲染