我有一个带有计算模型属性的Ember应用程序,我希望在模板中使用它。出于示例的目的,目前,我只是将其记录在模板中以测试输出:
{{log post.content}}
在模型中,计算属性" content"调用getMD(get markdown)函数:
var Post = DS.Model.extend({
mdURL: DS.attr('string'),
content: function() {
getMD(this.get('mdURL')).then(function(md) {
// On success
return md;
}, function(reason) {
// On fail
});
}.property('content')
});
function getMD(url) {
return new Promise(function(resolve, reject){
var xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.onreadystatechange = handler;
xhr.responseType = 'text';
xhr.setRequestHeader('Accept', 'application/text');
xhr.send();
function handler() {
if (this.readyState === this.DONE) {
if (this.status === 200) {
resolve(this.response);
} else {
reject(new Error('getMD: `' + url + '` failed with status: [' + this.status + ']'));
}
}
};
});
}
承诺最终会返回数据,但这种情况发生得太晚了。模板中的计算属性已经是未定义的。