我有一项服务可以分块上传许多大文件
export default Ember.Service.extend({
run(files, callbacks) {
// ugly async FileReader and ajax
// calling callbacks during the process
}
})
我需要一堆回调来显示进度,但问题是this
在这些回调中未定义
export default Ember.Component.extend({
upload: Ember.inject.service(),
didInsertElement() {
// bind fileinput change event to set up pending files
},
ondonesingle(self, file, uuid) {
// this is undefined
// self is real this
},
actions: {
submit() {
let callbacks = {
ondoneall: this.ondoneall,
ondonesingle: this.ondonesingle,
onprogressall: this.onprogressall,
onprogresssingle: this.onprogresssingle,
onerror: this.onerror,
object: this // will be passed as first argument to each callback
};
this.get('upload').run(this.get('pending_files'), callbacks);
},
}
})
为了解决这个问题,我必须到处引用这个。
它有效,但感觉非常错误。在 Ember 中执行此操作的最佳做法是什么?Observable 属性也感觉不对,怎么观察 2000 个文件的进度?将所有内容放在一个大对象中并在整个应用程序中共享?