我的应用程序具有与下面示例类似的结构。我需要界面来动态创建画布。当我创建这些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;
}());
答案 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();