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