我想使用Storybook为vue-select组件添加一些故事,但我正在努力处理更复杂的案例,这些案例涉及传递方法。
直接在我的组件中设置的方法有效(它会触发alert('default')
):
<template>
<v-select :on-change="onchangecallback"
:multiple="multiple"
v-model="selected" :options="options"></v-select>
</template>
<script>
import Vue from 'vue'
import vSelect from 'vue-select'
Vue.component('v-select', vSelect);
export default {
props: {
options: {
default: function() { return ['one', 'two'] },
type: Array
},
multiple: {
default: false,
type: Boolean
},
onchangecallback: {
default: () => {alert('default')},
type: Function
}
},
data() {
return {
selected: null
}
}
}
</script>
但我想覆盖onchangecallback
一个特定故事的功能(触发alert('custom')
),所以我添加到我的play/index.js
:
storiesOf('VSelect', module)
.add('onchangeCallback', () => ({
components: {VSelect},
template: `<v-select />`,
methods: {
onchangecallback: function() {
// not sure if I need a function returning a function, so I use both
alert('custom'); // never fired
return function() {
alert('custom'); // never fired
};
}
}
}))
但我仍然以alert('default')
相反的方式结束alert('custom')
,所以onchangecallback
不会被覆盖。
在这一点上,我什至不知道我是否正确地传递了这个方法,它的设计方式是如此违反直觉。即在我的组件(第一个代码片段)中,我onchangecallback
在道具中导出(并且它有效)但在Storybook 示例中,方法不是在道具中传递,而是在方法中传递!