2016-03-09 3 views
0

У меня есть небольшая проблема с использованием взаимодействия клиент-сервер в приложении Google Apps Script Web App.google.script.run.withSuccessHandler (onSuccess). onSuccess не работает внутри конструктора

Мои code.gs содержит:

function loadPetName() { 
    Logger.log('Client ask a Pet Name'); 

    // use Google apps UserProperties as default storage 
    var storage = PropertiesService.getUserProperties(); 

    return JSON.parse(storage.getProperty('name'); 
} 

Pet.html является:

<script> 
// CLASS Pet 
function Pet() { 

    // CONSTRUCTOR 
    console.log('Creating new Pet'); 
    var petName; 

    // Get pet name from outer storage 
    console.log('Loading pet name from storage...'); 
    google.script.run.withSuccessHandler(onSuccessLoad).loadPetName(); 
    var onSuccessLoad = function(name) { 
    console.log('run onSuccessLoad'); 
    this.petName = name; 
    alert('Pet Name is ' + name) 
    }; 

    // METHODS ... 
} 
</script> 

init.html является:

<script> 
function init() { 
    console.log('Initialization'); 
    var cat = new Pet(); 
} 
</script> 

index.html содержит:

<body onload=init()> 
    ... 

После index.html открыт в браузере я вижу в консоли:

Initialization 
Creating new Pet 
Loading Pet Name from storage... 

Но нет «запустить onSuccessLoad».

В консоли Google Script вы можете увидеть: «Клиент спрашивает имя любимчика». Все работает нормально, но функция onSuccessLoad не запускается.

Если в Pet.html заменить

google.script.run.withSuccessHandler(onSuccessLoad).loadPetName(); 

в

google.script.run.withSuccessHandler(console.log('SuccessHandler fired')).loadPetName(); 

Мы видим в консоли: "SuccessHandler уволили".

Где моя проблема?

Спасибо!

ответ

0

Я нашел ошибку ... OMG!

Этот код не работает:

google.script.run.withSuccessHandler(onSuccessLoad).loadPetName(); 

var onSuccessLoad = function(name) { 
    console.log('run onSuccessLoad'); 
    this.petName = name; 
}; 

Но этот код работает отлично:

var onSuccessLoad = function(name) { 
    console.log('run onSuccessLoad'); 
    this.petName = name; 
}; 

google.script.run.withSuccessHandler(onSuccessLoad).loadPetName(); 

Но почему ?! (Извините за глупый вопрос).

Смежные вопросы