Frage

Ich liebe, wie Google Closure Compiler Symbole in Code optimieren. Aber ich habe festgestellt, keinen guten Weg, um öffentliche, exportierten Funktionen zu definieren, die Konfigurationsobjekte als Parameter übernehmen. Betrachten Sie diesen Code-Snippet:

goog.provide('foo');
goog.require('goog.dom');

/** @typedef {{
 *              id : string,
 *              clazz : string
 *           }}
 */
foo.config;

/**
 * Does some neat stuff
 * @param {foo.config} config
 */    
foo.myFoo = function(config) {
    var el = goog.dom.getElement(config.id);
    goog.dom.classes.add(el, config.clazz);
} 
goog.exportSymbol('foo.myFoo', foo.myFoo);

Wir nehmen nun an, dieses Skript laden, und wollen myFoo nennen wie folgt:

<script type="text/javascript">
foo.myFoo({
    id: 'unique-id',
    clazz: 'pretty'
});
</script>

Wenn kompiliert, würde dies scheitern, weil id und clazz Eigenschaften komprimiert wurden.

Kennt jemand eine elegante Art und Weise zu implementieren und Export Konfigurationsobjekte der Google Closure Compiler?

War es hilfreich?

Lösung

mein Vorschlag wäre, einfach sein, um den Parameter als {Object} mit Anmerkungen versehen und die Schlüssel zu zitieren, wie folgt:

foo.myFoo({
    'id': 'unique-id',
    'clazz': 'pretty'
});

...

/**
 * Does some neat stuff
 * @param {Object} config
 */    
foo.myFoo = function(config) {
    var el = goog.dom.getElement(config['id']);
    goog.dom.classes.add(el, config['clazz']);
} 

Andere Tipps

In Bezug auf Konflikte von verstümmelten und rohen Eigenschaftsnamen

Du musst entweder:

  • "extern" Ihr Eigenschaftsnamen (so dass sie nicht umbenannt wird)
  • Verwendung "eingeklammert Notation", um den Zugriff propertiies

In Bezug auf Konfigurationsobjekte

Nach der docs Closure Compiler, zur Zeit können Sie es nicht tun. Sie haben die param als Objekt zu markieren.

Sie können eine Art definieren, aber es wird Ihnen nicht helfen, weil eine Art erfordert alle die Eigenschaften existieren, aber Sie können nur wenige Parameter in einem Satz Konfigurationsobjekt.

Die Dokumentation Closure Compiler empfiehlt, dass Sie den Parameter als Objekt markieren, sondern dokumentieren die Felder in den Kommentaren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top