2014-12-09 12 views
9

Ich habe eine Mixin app/mixins/ui-listener.js, die ich mit Ember-CLI zu kämpfen habe. Ich versuche, die mixin mit folgenden Syntax:Verwenden Sie Mixins mit Ember-CLI?

import ListenerMixin from './mixins/ui-listener'; 
export default Ember.Component.extend(ListenerMixin,{ 
    // class definition 
} 

Dies schlägt fehl, wenn ich es speichern, beschweren, dass

ENOENT, keine solche Datei oder das Verzeichnis ‚tmp/tree_merger-tmp_dest_dir-74tK3rvD tmp/[app-name] /components/mixins/ui-listener.js'

Es scheint komisch, dass die "Mixins" Verzeichnis unter dem "Komponenten" Verzeichnis verschachtelt ist (wie Ember-CLI diese Verzeichnisse legt auf der gleichen Ebene), aber das kann nur ein Brocoli Build Schritt. Wie auch immer, jede Hilfe würde sehr geschätzt werden.

+1

'. /' Bedeutet, dass dieses Verzeichnis '../' sein sollte, Ihnen fehlt ein '.' –

+0

@BasementKeyboardHero das ist korrekt ... Ich hatte das Beispiel von der Website verwendet, die anscheinend aktualisiert werden sollte. – ken

+0

Können Sie mich mit diesem Beispiel verbinden –

Antwort

14

Ich weiß nicht, wie Sie Ihre mixin exportieren aber dies sollte funktionieren:

in mixins/ui-listener.js:

import Ember from 'ember'; 

export default Ember.Mixin.create({ 
//some stuff 
}); 

in components/my-component.js:

import Ember from 'ember'; 
import UiListenerMixin from '../mixins/ui-listener'; 

export default Ember.Component.extend(UiListenerMixin, { 
// some stuff 
}); 
+0

Ich akzeptiere Ihre Antwort, wie Sie es in ein Antwortformat, aber wirklich @BasementKeyboardHero genagelt das Problem in dem Kommentar oben .. Ich habe das '..' in meiner Referenz fehlt. – ken

+3

Werden Mixins nicht mit Ember.Mixin.create (...) und nicht .extend (...) erstellt? – oens

26

Statt ../ der Zugabe (oder noch schlechter ../../../) in Ihre Importe, können Sie zu Ihrem config/environment.js gehen und nach der Eigenschaftsuchen. Nehmen wir an, das Präfix ist app-client.

Dann können Sie stattdessen mit import UIListen from 'app-client/mixins/ui-listener'; importieren. Absolute funktioniert am besten, wenn Sie sich in einer "tiefen" Unterroute usw. befinden.

+0

Das Importieren dieses Weges hätte also Ihr Pfadproblem (./ vs ../ Problem) behoben und würde sich um andere Pfadprobleme kümmern, auf die Sie in Zukunft stoßen könnten. – teh0xqb

+1

Das ist eine tolle Antwort! Doing '/../../../' ist ein PITA, und dann habe ich das gefunden. Vielen Dank! – xcskier56

+0

Gern geschehen :-) – teh0xqb