You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cordova.apache.org by "Jia Li (JIRA)" <ji...@apache.org> on 2017/08/15 13:56:00 UTC
[jira] [Created] (CB-13179) Cordova file plugin onEvent(such as
onload) should be invoked with _realReader as this
Jia Li created CB-13179:
---------------------------
Summary: Cordova file plugin onEvent(such as onload) should be invoked with _realReader as this
Key: CB-13179
URL: https://issues.apache.org/jira/browse/CB-13179
Project: Apache Cordova
Issue Type: Improvement
Components: cordova-plugin-file
Environment: Android, ios, Browser
Reporter: Jia Li
Priority: Minor
When `FileReader` add onEvent listener such as `onload`, it will add the listener to inner `_realReader` , but when it invoke the listener, it use the FileReader as `this`.
1. When add onload listener in application code.
```javascript
var fileReader = new FileReader();
fileReader.onload = function() {};
```
it will call `www/FileReader.js defineEvent`
```javascript
function defineEvent(eventName) {
utils.defineGetterSetter(FileReader.prototype, eventName, function() {
return this._realReader[eventName] || null;
}, function(value) {
this._realReader[eventName] = value;
});
}
```
the listener is added to `this._realReader`.
And when the listener is triggered for example in `readSuccessCallback`
it will invoke the method with `this`.
```javascript
this.onload(new ProgressEvent("load", {target:this}));
```
in the normal senario, it will ok, but when it work with some polyfilles such as `zone.js of angular4`, it will fail because `zone.js` have some special handling which require the `this` object be the same when add listener and invoke listener.
https://github.com/angular/zone.js/issues/868
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)
---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@cordova.apache.org
For additional commands, e-mail: issues-help@cordova.apache.org