因此,我不想使用Google的JavaScript文檔中的示例粘貼標準副本&,而是使用全局變量,我想使用原型封裝所有內容。在Javascript原型中使用Google Drive API
我的功能始於此:
define(function (require){
'use strict';
...
,但在這我現在擋住了有趣的一點是:
GoogleDrive.prototype.loadAPI = function() {
window.gapi.load('picker', {'callback': this.onPickerApiLoad});
};
GoogleDrive.prototype.onPickerApiLoad = function() {
this.pickerApiLoaded = true;
this.createPicker();
};
這並不因爲this
工作回調裏面是不是我的GoogleDrive
所以我得到:
Uncaught TypeError: Cannot set property 'pickerApiLoaded' of undefined
H我會將那個.onPickerApiLoad
連接到正確的範圍嗎?
UPDATE:
通過@喬恩的回答,我看着下劃線的bind
法源代碼,它使用call
,所以我試圖做同樣的,與返回一個版本我的原型功能的功能提示綁定到我想要的上下文:
GoogleDrive.prototype.loadAPI = function() {
var that = this;
googleAPI.load('picker', {'callback': function() { return that.onPickerApiLoad.call(that) }});
};
這似乎工作(不得不確認),但沒有那麼優雅。
我注意到谷歌返回一個承諾,如果你不通過回調,是否有可能使用,而不是另一個庫? – aledalgrande 2014-11-05 00:18:45
其實我錯了,只有'gapi.client.load'返回一個承諾,而且這個API是(令人困惑的)完全分離的。 – aledalgrande 2014-11-05 01:01:20
啊好的。是的,如果你有承諾,你可以用諾言...... – 2014-11-05 01:38:29