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

canvasActions()間違ったインスタンスを参照しても問題がないように見えますがcanvasActions、Raphael オブジェクトに配置すると、呼び出しに問題が発生するだけです。あれは正しいですか?

私はラファエルをよく知らない。でも、もっといい答えが欲しかった。ただし、ドキュメントを確認すると、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();
于 2012-05-14T17:59:53.853 に答える