0

私はまだ JS を学んでおり、KineticJS を使用してアプリを作成しようとしていますが、オブジェクト指向の方法で維持しています。

だから私は次のようなものを持っています:

/*   ClassA Constructor   */
    var ClassA=function(id, x, y, name, layer){
        this.id=id;
        this.x=x;
        this.y=y;
        this.name=name;
        this.layer=layer;

        this.object_group=new Kinetic.Group({
            x: x,
            y: y,
            id: id,
            draggable: true,
            name: "A_object_group"
        });

        var object_polygon=new Kinetic.Polygon({
            points: [0,0,1,1],
            fill: '#ffffff',
            stroke: 'black',
            strokeWidth: 1,
            opacity: 0.5,
            name: "A_object_polygon"
        });

        this.object_group.methodA=function(){
            //Method A goes here
        };

        this.object_group.add(object_polygon);
        this.layer.add(this.object_group);

    return(this.object_group);
}

次に、KineticJS メソッド toJSON() を使用してステージを JSON に変換し、後で Kinetic.Node.create() メソッドを使用して JSON から再度読み込みます。

問題は、オブジェクトをロードした後、「ClassA」クラスで定義された「MethodA」を認識しないことです。

これが最善のアプローチであるかどうかはわかりません。Kinetic.Group 部分だけでなく、オブジェクト全体を JSON にシリアル化する必要があるかもしれません。また、メソッドをシリアル化することも有効なアプローチではないように思われるため、質問: JSON から KineticJS オブジェクトをロードし、それらを引き続きクラスに属させ、そのクラスのメソッドへのアクセスを許可するにはどうすればよいですか?

4

2 に答える 2

0

次の方法で実行できます。

  1. classA のメンバーとして識別する属性をグループに追加します。たとえば、this.object_group.setAttribute('class','ClassA') この属性は JSON 文字列に保存されます。
  2. JSON からノードを作成する場合、ステージがすべて設定されたら、属性「class」が「ClassA」に設定されているすべてのオブジェクトをレイヤーで検索し、これらのオブジェクトに関数を再割り当てします。

オブジェクトをあまり頻繁に再作成する必要がない場合、この方法はうまく機能します。

代わりに、そのようなすべてのオブジェクトに同じ名前を割り当ててから、指定された名前のオブジェクトのコレクションを返す(こちらのドキュメントを参照)objClassAを使用し、それらを繰り返し処理して関数を追加し直すことができます。layer.get(".objClassA")

于 2013-07-18T12:52:20.327 に答える