aarondfrancis / vue-model

Model component for Vue.js
MIT License
857 stars 42 forks source link

Vue.models.register doesn't work #28

Open markkimsal opened 5 years ago

markkimsal commented 5 years ago

Installing vue-model with Vue.use(require('vue-model')); sets the Vue.models to have register, addeventlistener and removeeventlistener, but there is no "this" calling context so accessing this.registry['name'] = definition causes an exception.

      Vue.models = { 
            register: this.register,
            addEventListener: this.bus.on,
            removeEventListener: this.bus.off,
        };
    register(name, definition) {
        definition = _.toPlainObject(definition);

        // Set the name of the model as the Event Prefix,
        // but only if there isn't a prefix set yet
        if (! _.get(definition, 'http.eventPrefix', false)) {
            _.set(definition, 'http.eventPrefix', name);
        }

        this.registry[name] = definition;
    }
var VueModel = require('vue-model');
Vue.use(VueModel);
const AcademyModel = require('./lib/models/Academy.js').default;                                                                                                      
VueModel.register('academy', AcademyModel);

That works, but this doesn't

var VueModel = require('vue-model');
Vue.use(VueModel);
const AcademyModel = require('./lib/models/Academy.js').default;                                                                                                      
Vue.models.register('academy', AcademyModel);

VueModel.js?55ae:20 Uncaught TypeError: Cannot set property 'customer' of undefined at Object.register (VueModel.js?55ae:20) at eval (Academy.vue?9fd4:170)

markkimsal commented 5 years ago

I think the fix is to bind this

       Vue.models = { 
            register: this.register.bind(this),
            addEventListener: this.bus.on.bind(this.bus),
            removeEventListener: this.bus.off.bind(this.bus),
        };