2
0
mirror of https://github.com/tenrok/vue-tribute.git synced 2026-06-25 01:10:34 +03:00

remove timeout in param watcher, add test to ensure param watcher gets called

This commit is contained in:
syropian
2016-07-26 18:20:15 -04:00
parent 09284fa416
commit 4643046fc0
4 changed files with 45 additions and 36 deletions
+4 -8
View File
@@ -14,15 +14,11 @@ exports.install = function (Vue, options) {
tribute: null, tribute: null,
paramWatchers: { paramWatchers: {
values: function values(val, oldVal) { values: function values(val, oldVal) {
var _this = this; this.setValues(val);
setTimeout(function () {
_this.setValues(val);
}, 0);
} }
}, },
bind: function bind() { bind: function bind() {
var _this2 = this; var _this = this;
// If it has a "values" property, it's actually a collection // If it has a "values" property, it's actually a collection
if (this.params.values.hasOwnProperty("values")) { if (this.params.values.hasOwnProperty("values")) {
@@ -37,10 +33,10 @@ exports.install = function (Vue, options) {
this.tribute.attach(this.el); this.tribute.attach(this.el);
this.el.addEventListener("tribute-replaced", function (e) { this.el.addEventListener("tribute-replaced", function (e) {
_this2.vm.$emit("tribute-replaced"); _this.vm.$emit("tribute-replaced");
}); });
this.el.addEventListener("tribute-no-match", function (e) { this.el.addEventListener("tribute-no-match", function (e) {
_this2.vm.$emit("tribute-no-match"); _this.vm.$emit("tribute-no-match");
}); });
}, },
setValues: function setValues(values) { setValues: function setValues(values) {
+4 -8
View File
@@ -16,15 +16,11 @@
tribute: null, tribute: null,
paramWatchers: { paramWatchers: {
values: function values(val, oldVal) { values: function values(val, oldVal) {
var _this = this; this.setValues(val);
setTimeout(function () {
_this.setValues(val);
}, 0);
} }
}, },
bind: function bind() { bind: function bind() {
var _this2 = this; var _this = this;
// If it has a "values" property, it's actually a collection // If it has a "values" property, it's actually a collection
if (this.params.values.hasOwnProperty("values")) { if (this.params.values.hasOwnProperty("values")) {
@@ -39,10 +35,10 @@
this.tribute.attach(this.el); this.tribute.attach(this.el);
this.el.addEventListener("tribute-replaced", function (e) { this.el.addEventListener("tribute-replaced", function (e) {
_this2.vm.$emit("tribute-replaced"); _this.vm.$emit("tribute-replaced");
}); });
this.el.addEventListener("tribute-no-match", function (e) { this.el.addEventListener("tribute-no-match", function (e) {
_this2.vm.$emit("tribute-no-match"); _this.vm.$emit("tribute-no-match");
}); });
}, },
setValues: function setValues(values) { setValues: function setValues(values) {
+1 -3
View File
@@ -10,9 +10,7 @@ exports.install = function (Vue, options) {
tribute: null, tribute: null,
paramWatchers: { paramWatchers: {
values (val, oldVal) { values (val, oldVal) {
setTimeout(() => { this.setValues(val)
this.setValues(val)
}, 0)
} }
}, },
bind () { bind () {
+36 -17
View File
@@ -2,24 +2,43 @@ import Vue from "vue";
import VueTribute from "../src"; import VueTribute from "../src";
Vue.use(VueTribute); Vue.use(VueTribute);
var vm = null
beforeEach(() => {
vm = new Vue({
el: document.body,
replace: false,
template: "<input type='text' :values='items' v-tribute />",
data(){
return {
items: [
{key: "Phil Heartman", value: "pheartman"},
{key: "Gordon Ramsey", value: "gramsey"}
]
}
}
})
})
describe("vue-tribute", () => { describe("vue-tribute", () => {
it("has an install method for Vue.use()", () => { it("has an install method for Vue.use()", () => {
expect(typeof VueTribute.install).toEqual("function"); expect(typeof VueTribute.install).toEqual("function")
}); })
it("creates the v-tribute directive", () => {
const vm = new Vue({
template: "<input type='text' :values='items' v-tribute />",
data(){
return {
items: [
{key: "Phil Heartman", value: "pheartman"},
{key: "Gordon Ramsey", value: "gramsey"}
]
}
}
}).$mount();
expect(typeof vm.$options.directives["tribute"]).toEqual("object"); it("creates the v-tribute directive", () => {
}); expect(typeof vm.$options.directives["tribute"]).toEqual("object")
})
it("triggers the param watcher when the underlying model changes", (done) => {
spyOn(vm.$options.directives["tribute"].paramWatchers, "values").and.callThrough()
const newItems = [
{key: "Kerem Suer", value: "kerem"},
{key: "Rob Delaney", value: "robdelaney"}
]
vm.$set("items", newItems)
setTimeout(() => {
expect(vm.$options.directives["tribute"].paramWatchers.values).toHaveBeenCalled()
done()
}, 0)
})
}) })