2016-06-25 5 views
0

Ich habe zwei Klassen StepsForm und BiblioForm und ich möchte Schritte zum bilden BiblioForm verlängern, aber wenn ich versuche es mit dem Code unter der Konsole sagtCoffeescript kann nicht Klasse wegen Umfang zugreifen

Uncaught ReferenceError: BiblioForm

StepsForm Klasse

(($) -> 

    class StepsForm extends BiblioForm 

     ... 

    form = new StepsForm; 

) jQuery 

Bibl ioForm Klasse

(($) -> 
    class BiblioForm 

     .... 

    basicBiblioForm = new BiblioForm 

) jQuery 

Ich benutze Grunzen zu kompilieren und diese Klassen zusammen wie diese

coffee: { 
    compile: { 
    files: { 
     'lib/js/tome-references.js' : [ 
     'lib/coffee/biblio-form.coffee', 
     'lib/coffee/steps-form.coffee', 
     ] 
    } 
    } 
}, 

Ich möchte nur anmerken, dass ich müssen in beiden Klassen jQuery verwenden.

Wenn ich die erste und letzte Zeile in jeder Klasse löschen, funktioniert die Erweiterungsfunktion, aber dann habe ich keinen Zugriff auf jQuery.

Vielen Dank für Ihre Zeit.

+0

Da Sie bereits einen Übersetzungsschritt haben, können Sie Bundler (webpack oder browserify) konfigurieren und Abhängigkeiten für Sie auflösen. '$ = require 'jquery' \ n module.exports = Klasse BiblioForm ...' und '$ = require 'jquery' \ n BiblioForm = require './biblio-form.coffee' \ n module.exports = Klasse StepsForm extends BiblioForm ' –

Antwort

0

Wenn jQuery eine Abhängigkeit ist, machen Sie sie explizit in Ihren Klassen.

class BiblioForm 
    constructor: (@$) -> 

    doSomething: => 
    @$("#foo").bar() 

class StepsForm extends BiblioForm 
    constructor: ($) -> 
    super($) 

    doAnything: => 
    @$("#baz").hide() 

und instanziiert es wie

biblioForm = new BiblioForm(jQuery) 
stepsForm = new StepsForm(jQuery) 

Es ist auch eine gute Idee zu concatenate coffee files before compiling them andere Sichtprobleme zu vermeiden.

+0

Danke das hilft, aber gibt es irgendeinen Weg, nur" $ "und nicht" @ $ "zu benutzen, weil es irgendwie komisch wirkt. –

+0

Sie können 'this. $' Schreiben, was dasselbe ist. Persönlich würde ich die jQuery global zugänglich machen. Dies ist gegen OOP-Prinzipien, aber hey, man kann jQuery als JS-Erweiterung behandeln. – fracz

+0

Ich kann "jQuery" in meiner Klasse verwenden, aber ich kann nicht das "$" Zeichen –