如何确定Dashing组件监听的数据类型及所需JSON格式?
在Dashing里确实经常遇到组件数据格式不明确的问题,毕竟官方文档比较简略。我总结了几个实用的方法来解决这个问题:
1. 直接查看组件的源码(最可靠)
Dashing的所有组件都是开源的,每个组件的逻辑都写在对应的CoffeeScript/JavaScript文件里。你可以去项目的widgets目录下找到目标组件的文件夹,打开里面的.coffee或.js文件,找到receive方法——这个方法就是用来接收send_event传来的数据的。
比如Number组件的receive方法大概是这样的:
receive: (data) -> if data.current? @set 'current', data.current if data.last? @set 'last', data.last # 其他逻辑
从这里就能清楚看到,它需要current和last这两个字段。同理,Meter组件的receive方法会处理value字段。
2. 查看组件自带的说明文档
很多官方组件或者流行的第三方组件,在它们的文件夹里会附带README.md文件,或者在源码顶部有注释,里面会明确说明所需的数据格式。比如有些自定义组件的README里会直接给出send_event的示例代码,直接照搬就行。
3. 参考官方示例项目
Dashing的官方示例项目(就是你初始化项目时默认生成的那些示例)里包含了大部分常用组件的使用场景。你可以看jobs目录下的示例job文件,比如synergy.rb里的send_event('synergy', { value: rand(100) }),这就是Meter组件的标准格式;valuation.rb里的传参方式就是Number组件的要求。照着示例写基本不会出错。
4. 调试测试法
如果以上方法都找不到答案,那就自己动手调试:
- 在组件的
receive方法里添加console.log(data),然后打开浏览器的开发者工具,查看控制台打印的内容,就能知道组件收到了什么数据,以及哪些字段被处理了。 - 尝试给
send_event传不同结构的JSON,观察组件的显示变化,比如传个{ test: 123 },看组件会不会有反应,或者有没有报错,反向推导需要的字段。
关于组件监听的数据类型
其实组件监听的就是你在send_event里指定的widget_id——这个ID和你在dashboard的erb模板里给组件设置的data-id属性是对应的。比如你在dashboard里写:
<li data-row="1" data-col="1" data-sizex="1" data-sizey="1"> <div data-id="synergy" data-view="Meter" data-title="Synergy"></div> </li>
这里的data-id="synergy"就是组件监听的ID,所以你在job里要用send_event('synergy', ...)来给它传数据。而组件能处理的数据类型,完全由它的receive方法决定——方法里处理了哪些字段,就需要传哪些字段,字段的类型(数字、字符串等)也可以从方法里的逻辑看出来。
内容的提问来源于stack exchange,提问作者maometto

