【发布时间】:2012-02-02 08:12:13
【问题描述】:
我正在构建一个高级图表 API(在 d3 之上)作为 jQuery 插件的集合。
我想将整个项目命名为“d3charts”,但将每个插件都放在自己的文件中。因此,例如,我可能有 d3charts.histogram.js 和 d3charts.pie.js。我希望 API 看起来像这样:
<script src="jquery.js"></script>
// I don't really have any common functionality yet, this is an empty file
// not sure if this sort of thing is necessary to achieve the API below
<script src="d3charts.js"></script>
// load only the chart types I want to actually use
<script src="d3charts.histogram.js"></script>
<script src="d3charts.pie.js"></script>
<script>
var foo_data = [ ... ];
var bar_data = [ ... ];
$('.foo').d3charts.histogram(foo_data);
$('.bar').d3charts.pie(bar_data);
</script>
我有单独的图表作为常规(非命名空间)jQuery 插件工作,请参阅 source 和 pretty display。
我的插件需要什么结构才能使这个 API 按我想要的方式工作?这意味着:
// Not this
$('.foo').d3charts().histogram(foo_data);
// Not this either
$.d3charts.pie('.foo', bar_data);
// but chaining should still work:
$('.foo').d3charts.histogram(foo_data).toggleClass('histogramchart');
其他必备素质:
- 我不能假设加载插件的任何顺序。
- 理想情况下,我想要一个不需要加载像
d3charts.js这样的空命名空间“父”脚本的解决方案。 - 在原始(非命名空间)插件中,我使用推荐的
return this.each()在选择器中的每个元素上运行我的代码。命名空间插件应该以某种方式保留这种行为。
This SO 答案似乎是一个难题,但我没有运气将整个图片放在一起。
感谢您的指导!
【问题讨论】:
标签: javascript jquery