2012-05-14 67 views
0

我的应用程序的结构与下例类似。我需要界面来动态创建画布。当我创建这些raphael对象时,我将它们作为canvasActions的参数。调用给予raphael对象构造函数的函数对象的方法作为回调函数

如果我使用createCanvas方法创建新的画布对象,则将对象设置为canvases-table的类型是Raphael,并且似乎无法使用分配给它的canvasActions。所以问题是我不能在由canvasActions函数返回的接口中使用方法。

为了调用分配给特定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

它看起来像你不与具有canvasActions()指的是错误的实例的问题,但你只是有打电话canvasActions在所有问题,一旦你已经将它放入拉斐尔对象。那是对的吗?

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

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

如果您不能使用由拉斐尔定义的回调,那么你总是可以(与你的索引数组代替纸)添加自己的,就像这样:

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

然后,你应该能够使用:

myApp.getCanvas(0).performActions(); 
+0

谢谢你的回答,但是这似乎并没有解决我的亲blem。 –

+0

是的,在放入Raphael物体后,我无法调用canvasActions。 btw。 Raphael文档(http://raphaeljs.com/reference.html#Paper.path)指出可以有4个参数,第四个是回调。我会用你的回答给出的想法做更多的测试,并希望我能够解决这个问题。 –

+0

链接到拉法尔参考的正确位置:http://raphaeljs.com/reference.html#Raphael –

1

callback参数就是这样 - 一旦调用该文件已准备就绪的回调方法。这不意味着被转介和使用,否则。

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

例子:

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

// ... 

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

参考文献: