0

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

如果我使用 createCanvas-method 创建新的 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;

}());        
4

2 回答 2

1

callback参数就是这样 - 文档准备好后调用的回调方法。它并不意味着被引用和以其他方式使用。

如果您希望向 中添加功能paper,请使用Raphael.fn来增强对象的内置功能Raphael

例子:

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

// ...

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

参考:

于 2012-05-18T17:26:45.760 回答
0

看起来您在引用错误的实例时没有问题,但是一旦将其放入 Raphael 对象中canvasActions(),您根本就遇到了调用问题。canvasActions那是对的吗?

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

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();
于 2012-05-14T17:59:53.853 回答