从外面调用稿件中的函数

时间:2015-08-17 14:29:27

标签: paperjs

我有3个JS文件。

  1. main.js
  2. map.js
  3. legend.js
  4. map.js和legend.js是2幅不同画布的论文。 它们是从HTML中调用的。

    <script type="text/javascript" src="main.js"></script>
    <script type="text/paperscript" src="map.js" canvas="mapCanvas"></script>
    <script type="text/paperscript" src="legend.js" canvas="legendCanvas"></script>
    
    <{1>}中的

    ,我们有一个名为map.js

    的函数 <{1>}中的

    ,我们有一个名为drawMap()

    的函数 显然他们操纵自己的画布。

    要求:我想从main.js调用这些函数。

    我看过这篇文章 Paperscope and paperjs

    并按照这些说明操作 https://groups.google.com/forum/#!msg/paperjs/C6F0XFlplqM/_67AMqCR_nAJ

    但我不确定如何以及在何处建立和调用PaparScope对象。

    仍然无法正常工作。

    这很接近:Paper.js Interoperability

    但我需要的是另一种方式。

1 个答案:

答案 0 :(得分:3)

您需要从外部导出要呼叫的功能,例如:

window.drawMap = drawMap;
window.drawLegend = drawLegend;

然后他们变成全球状,你可以从外面打电话给他们。

更优雅的方式可能是在全局范围内定义容器,例如(在PaperScript代码之前执行的普通JavaScript脚本标记中,例如在main.js中):

var globals = {};

然后以相同的方式从PaperScript访问和填充此容器:

globals.drawMap = drawMap;
globals.drawLegend = drawLegend;

之后,您可以在任何JavaScript或PaperScript中使用它们:

globals.drawMap();
globals.drawLegend();

<强>更新

由于您使用多个PaperScope(由绑定到分隔画布的PaperScript代码创建),因此需要在调用处理给定画布的函数之前激活正确的范围。最好直接在drawMap()drawLegend()函数中执行此操作,因此从外部调用时无需担心。

在PaperScript中,this指向范围,因此您可以在函数外执行此类操作:

var scope = this;

然后在函数内部:

scope.activate();