2016-04-12 12 views
0

Jemand kann mir helfen?Wrapping Selectpicker mit Vuejs Direktive und i18n

Ich mache eine Vue.js-Anweisung, um die bootstrap-selectpicker zu wickeln und innerhalb der Direktive möchte ich die vue-i18n-plugin verwenden, um einen Standardtitel zu übersetzen, falls diese Parameter leer sind, aber ich kann nicht ... Ich erhalte eine Fehler zu sagen, dass:

Uncaught ReferenceError: $i18n is not defined

my-directive.js

import Vue from 'vue'; 

Vue.directive('plSelectpicker', { 
    twoWay: true, 

    params: [ 
    'title', 
    'style', 
    'liveSearch', 
    'actionsBox' 
    ], 

    bind: function() { 
    $(this.el).selectpicker({ 
     liveSearch: this.params.title || true, 
     title: this.params.title || $i18n.select, 
     style: this.params.style || 'btn-white', 
     actionsBox: this.params.actionsBox || true, 
    }); 
    }, 
}); 

ich habe auch versucht, dass man:

import Vue from 'vue'; 
import i18n from 'vue-i18n-plugin/src/vue-i18n.js'; 
Vue.use(i18n); 

Vue.directive('plSelectpicker', { 
    twoWay: true, 

    params: [ 
    'title', 
    'style', 
    'liveSearch', 
    'actionsBox' 
    ], 

    bind: function() { 
    $(this.el).selectpicker({ 
     liveSearch: this.params.title || true, 
     title: this.params.title || $i18n.select, // also tried this.$i18n 
     style: this.params.style || 'btn-white', 
     actionsBox: this.params.actionsBox || true, 
    }); 
    }, 
}); 

Aber es Kopf, um mich auf den Fehler:

Uncaught TypeError: Cannot read property 'select' of undefined

Jemand eine Idee?

Antwort

1

this bezieht sich auf die Richtlinie, nicht die Vue-Instanz, also ist $i18n nicht auf diese Weise zugänglich. Versuchen Sie this.vm.$i18n

+0

Cool !! Es funktioniert, aber ich habe immer noch ein Problem ... Ich ändere die Sprachanwendung diesen Titel ändert sich nicht! Weißt du, warum? Die ganze App ändert sich, aber es geht nicht! –

+0

Der Selectpicker-Titel reagiert nicht wie Vue. Sie müssen die Funktion 'update' der Anweisung verwenden, um die Auswahlauswahl mit neuen Optionen zu aktualisieren, zu aktualisieren oder möglicherweise neu zu erstellen – Jeff