调用赋予raphael对象构造函数的函数对象的方法作为回调函数

时间:2012-05-14 17:28:01

标签: javascript raphael

我的应用程序具有与下面示例类似的结构。我需要界面来动态创建画布。当我创建这些raphael对象时,我给它们canvasActions作为参数。

如果我使用createCanvas方法创建新的canvas-object,设置为canvases-table的对象是Raphael类型,似乎我不能使用分配给它的canvasActions。所以问题是我无法使用canvasActions-function返回的接口中的方法。

为了调用分配给特定Raphael对象的方法,我必须做出哪些更改?

var myApp = (function() {
    var canvasActions = function() {

        var actionInterface = function() {
            //returns interface object
        }();

        return actionInterface;
    }

    var myAppInterface = function {
        var canvases = [];
        var appInterface = {
            createCanvas: function(contextElementId, width, height) {
                 canvases[canvases.length] = Raphael(contextElementId, width, height, canvasActions);
            },
            getCanvas: function(index) {
                return canvases[index]; 
            }
        }
        return appInterface;
    }();

    return myAppInterface;

}());        

2 个答案:

答案 0 :(得分:1)

callback参数只是 - 文档准备好后调用的回调方法。它并不意味着被引用和使用。

如果您希望向paper添加功能,请使用Raphael.fn来扩充Raphael对象的内置函数。

示例:

Raphael.fn.canvasActions = {
    move: function () {
        // ...
    },
    repaint: function () {
        // ...
    }
    // etc.
};

// ...

appInterface.getCanvas(5).canvasActions.repaint();

<强>参考文献:

答案 1 :(得分:0)

您似乎没有canvasActions()引用错误的实例时出现问题,但是一旦您遇到canvasActions,您就会遇到问题。把它放入拉斐尔物体。这是对的吗?

我对拉斐尔一点也不熟悉。但我想给你一个更好的答案。但是,当我浏览文档时,我没有看到Raphael构造函数中任何地方使用的第4个参数回调。相反,我总是看到这个:

var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);

如果您无法使用Raphael定义的回调,那么您可以随时添加自己的回调(例如用您的索引数组替换纸张):

var paper = new Raphael(document.getElementById('canvas_container'), 500, 500);
paper.performActions = canvasActions;

然后,您应该可以使用:

myApp.getCanvas(0).performActions();