Хорошо, мой собственный ответ исходит от предложения @ numbers1311407. По сути, я подключился к событиям плагинов из функции mounted
Vue, а затем использовал метод экземпляра $set
, чтобы изменить нужное мне свойство. Итак, подведем итог, вот мой HTML:
<input name="project[deadline]" v-model="form.project.deadline" data-toggle="datepicker" id="project-deadline" type="text" value="" />
А вот мой JS:
var vueapp = new Vue({
el: '#form'
,data:{
form:{ // for tech reasons I'm using several nested empty objects here
contact:{}
project:{}
component:{}
// [...] other several objects ...
}
}
,mounted: function(){
$('[data-toggle="datepicker"]').on('hide.datepicker', function (e) {
_.delay(function(){ // from lodash.js
this.$set(this.form.project, 'deadline', $(e.target).val());
}.bind(this), 150); // because the plugin's event fires before the field gets updated
}.bind(this));
}
});
Обратите внимание, что я немного откладываю назначение, но это не вещь Vue. Это происходит только потому, что событие плагина, которое я использую, запускается непосредственно перед изменением значения, а сам плагин не предоставляет никакого события, которое происходит после. Поэтому мне нужно немного подождать, пока поле будет обновлено, а затем я могу подобрать его значение и присвоить его модели Вью.
Для справки, используемый в данный момент плагин этот .