2012-06-05 6 views
8

Ich habe versucht, mithilfe von Google Apps-Skript ein Toolset zu erstellen. Das Problem dabei ist, dass, soweit ich das beurteilen kann, nur eine Organisationsebene erlaubt ist. Sie können eine Bibliothek namens Stoppuhr erstellen und die Methoden Stoppuhr.start() und Stoppuhr.stop() aufrufen, was ziemlich cool ist.Erstellen einer Namespace-ähnlichen Organisation in einer Google Apps-Skriptbibliothek

Was ich im Sinn hatte, war etwas mehr wie Utils.Stopwatch(). Start() und Utils.Timer.start() usw. Ich denke, es ist sicherlich in Javascript möglich, aber immer brechen Apps Script Autocomplete Funktion muss es in einem bestimmten Format hinzugefügt werden. Unten ist ein Beispiel, das es falsch macht (gibt einen Fehler), aber vielleicht spart etwas Zeit. Es basiert auf this Artikel.

/** 
* A stopwatch object. 
* @return {Object} The stopwatch methods 
*/ 
function Stopwatch() 
{ 
    var current; 

    /** 
    * Stop the stopwatch. 
    * @param {Time} time in miliseconds 
    */ 
    function timeInSeconds_(time) 
    { 
    return time/1000; 
    } 

    return 
    { 
     /** 
     * Start the stopwatch. 
     */ 
     start: function() 
     { 
     var time = new Date().getTime(); 
     current = timeInSeconds_(time); 
     }, 

     /** 
     * Stop the stopwatch. 
     * @return {decimal} time passed since calling 
     * start (in seconds) 
     */ 
     stop: function() 
     { 
     var time = new Date().getTime(); 
     var difference = timeInSeconds_(time) - this.current; 
     return difference.toFixed(3); 
     } 
    }; 
} 

Dank

+0

ich Sie erraten sind Code in diesem Fall wäre 'Utils.Stopwatch() start()' – Eduardo

+0

Ja, das ist richtig, mein schlechtes –

Antwort

3

Sie Feature-Anfragen hier einreichen: OO

http://code.google.com/p/google-apps-script-issues/issues/list

+0

Vielleicht könnte ich, ich bin. nicht wirklich sicher, ob dies etwas ist, das andere Leute nützlich finden würden. Es könnte nur zu viel erwartet werden. –

+5

Ich habe einen Fehlerbericht erstellt http://code.google.com/p/google-apps-script-issues/issues/detail?id=1389&thanks=1389&ts=1338940848 – Eduardo

0

Was ist mit?

Es sieht sehr gut organisiert und es ist einfach zu dokumentieren.

/** 
* A stopwatch Class. 
* 
* @constructor 
*/ 
function Stopwatch() { 
    this.current = new Date().getTime(); 
} 

/** 
* Starts the stopwatch 
*/ 
Stopwatch.prototype.start = function(){ 
    this.current = new Date().getTime(); 
}; 

/** 
* Stops the stopwatch 
* 
* @return {number} Number of seconds since Stopwatch was started 
*/ 
Stopwatch.prototype.stop = function(){ 
    return ((new Date().getTime()) - this.current)/1000; 
}; 

Beispiel. Falls Ihre Lib als Utils importiert wird.

var s = new Utils.Stopwatch(); 
s.start(); 

// (...) 

Logger.log(s.stop()); 

PS: Dies ist ungetesteter Code.

Als Nebeneffekt mehrere Stoppuhren haben könnte, die Aufrechterhaltung jeder seine eigene lokale Variable ist current

UPDATE

Obwohl dies korrekt folgende JSDoc dokumentiert ist es zur Zeit nicht die Methoden, mit Google nicht automatisch vervollständigen Apps-Skript

+0

Der Code läuft (und ist auch kompakter) aber Dies unterbricht die Funktionsweise der Apps Script-Bibliotheken. Damit die Autocomplete-Version dort funktioniert, definieren Sie ein Schlüsselwort, das Apps Script mit der Bibliothek verbindet.Ein Beispiel wäre:. '// Für 'Utils' Utlis.Stopwatch()() beginnen' –

+0

Leider habe ich zu oft bearbeitet und .. Der Rest 'var Zeit warten mussten = Utlis.Stopwatch() .stop() ' Es gibt einen schönen Artikel darüber hier: [Link] (http://googleappsdeveloper.blogspot.com/feeds/posts/default) Ich nehme an, Sie sind sich der oben genannten, was bewusst Ich meine, dass 's.start()' oder 'Utils.Stopwatch(). Start()' für diese Angelegenheit nicht von der Autocomplete-Funktion aufgenommen wird. Nur das Schlüsselwort und eine Funktion fehlen. Wenn Sie die start() -Methode zur automatischen Vervollständigung bekommen können, haben Sie mein Problem gelöst :) @Eduardo –

+0

Sie haben recht, wenn Sie OO nicht in Google Apps Script automatisch vervollständigen – Eduardo

2

Es funktioniert noch nicht, aber das Team weiß es. Bis dahin müssen Sie Ihre Bibliotheken auf einer Website dokumentieren. Ich denke du könntest die Methoden auch in die Beschreibung einbringen. Es ist wirklich ein toller Start für den neuen Service, aber ich war mit dir etwa 5 Minuten in und wollte schon mehr. ;)

+0

Danke für die Informationen, ich denke, wir müssen nur dann warte. –

3

Bis diese Funktionalität von Google nativ unterstützt wird, können Sie leere Funktionen mit Annotationen auf derselben Ebene wie Ihre Konstruktorfunktion definieren. Sie können sogar Ihre ursprüngliche Codestruktur beibehalten. Dies würde die automatische Vervollständigung im Editor ermöglichen. Außerdem erhalten Sie automatisch generierte Dokumentation für Ihre Bibliothek, z. https://script.google.com/macros/library/versions/d/YOUR_PROJECT_KEY

Beispiel:

/** 
* Constructor. 
* @constructor 
* @param {String} apiKey Doxument API key 
* @param {String} apiToken Doxument API token 
*/  
function DoxumentApi(apiKey, apiToken) { 
    // public api 
    return { 
     get: function(id, params) { 
      var httpResponse = execute('/docs/' + id + '.json?' + buildQuery(params)); 
      return parse(httpResponse); 
     } 
    } 
} 

/** 
* Get document record. 
* @param {String} id document id 
* @param {Object=} params optional. extra get params 
* @return {Object} Document object 
*/  
function get(id, params) {} 
+2

Dies würde die Methode nur auf der obersten Ebene automatisch vervollständigen, nicht auf der Unterebene, wo die Mothods definiert sind. Für mein Beispiel sollte es Tools.Stopwatch() sein. Start() statt Tools.start(). –

Verwandte Themen