假设我想创建一个苗条的多色选择器,也许让用户选择前景色和背景色。我的数据模型如下所示:
{
foreground: {
r: 100,g:100,b:100
},
background: {
r: 200,g:200,b:200
}
};
所以我的 app.js 是
import AppUI from './App.html';
import { Store } from 'svelte/store.js';
const defaultData = {
foreground: {
r: 100,g:100,b:100
},
background: {
r: 200,g:200,b:200
}
};
const store = new Store(defaultData);
window.store = store; // useful for debugging!
store.onchange(() => console.log('something changed'));
var app = new AppUI({
target: document.querySelector( '#main' ),
store
});
export default app;
然后我可以构建一个RGBSelector
组件来重用:
<input type="range" min=0 max=255 step=1 bind:value=data.r/>{{data.r}}
<input type="range" min=0 max=255 step=1 bind:value=data.g/>{{data.g}}
<input type="range" min=0 max=255 step=1 bind:value=data.b/>{{data.b}}
我App.html
的很简单:
foreground:
<RGBSelector bind:data=$foreground/>
background:
<RGBSelector bind:data=$background/>
<script>
import RGBSelector from './RGBSelector.html';
export default {
components: {
RGBSelector
}
};
</script>
这似乎工作,主要是。范围输入中的双向绑定正在工作(标签更新),并且商店甚至正在更新(通过store._state
在控制台中检查来验证)。所以我相信 中的bind
关键字RGBSelector
将更改传递到它们在中声明的位置App
,这反过来又将bind
它们发送到商店。
麻烦的是,store.onchange
处理程序没有开火。谁能看到我做错了什么?