2012-05-14 113 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(); 

參考文獻: