Ractive.jsを初めて使用し、ドキュメントを読み終えた後、私はまだいくつかの構文を諦めています。以下の例では、のキャンバスタグをそれぞれ要素の配列に作成し、という異なるオブジェクトをアニメーションを処理するためのカスタムクラスのオブジェクトをインスタンス化します。コメントに記載されているように、私は3つのエラーを投げています。Ract.jsの子プロパティを参照
イベントハンドラでは、heightプロパティ(my配列で定義されています)を参照しますが、this.get(repeater.height)もthis.repeater.heightも機能しません。また、そのイベントに関連付けられたオブジェクトのメソッドを呼び出すが、this.myCustomClass.setFrame()を使用しても動作していない。
アニメーションクラスのコードで、キャンバスのメソッドを参照しようとすると、少なくとも1つのエラーが発生します。this.canvas.getContext()ここで、「キャンバス」は、オブジェクトコンストラクタ。
明らかに、私はRactiveインスタンスの子プロパティを参照する方法について誤解しています。どんな助け?
var repeater = [
{id: "stalkerOne", width: 225, height: 432, left: 8, spriteSheetURL: "spriteSheets/stalkerone.jpg", rows: 5, columns: 5, totalFrames: 24},
{id: "stalkerTwo", width: 175, height: 432, left: 230, spriteSheetURL: "spriteSheets/stalkertwo.jpg", rows: 6, columns: 5, totalFrames: 26},
{id: "stalkerThree", width: 251, height: 432, left: 404, spriteSheetURL: "spriteSheets/stalkerthree.jpg", rows: 6, columns: 5, totalFrames: 28}
]
var CanvasAnimation = Ractive.extend({
oninit: function() {
this.get('repeaters').forEach(function(repeater){
var myCanvasSprite = new CanvasSprite(repeater.id, repeater.width, repeater.height, repeater.spriteSheetURL, repeater.rows, repeater.columns, repeater.totalFrames);
myCanvasSprite.setFrame(0);
//this.canvas.getContext() throwing error in class code
});
this.on('setFrame', function (event) {
var offsetY = event.original.clientY - event.node.getBoundingClientRect().top;
var relY = offsetY/this.get(repeater.height); //why doesn't this.get() work here?
this.myCanvasSprite.setFrame(relY); //custom class method not working either...
});
}
});
var canvasAnimation = new CanvasAnimation({
el: '#container',
template: '#template',
data: { repeaters: repeater }
});
お返事ありがとうございます。これははるかに洗練されたソリューションであり、私はRactiveデータに自分のオブジェクトを追加するという点で問題を抱えています。例外を除いて...配列を取るようにコンストラクタを変更しましたが、これは数十もの他のプロジェクトでこのコードを使用しているので、ここでは私の選択肢ではありません。私のkneejerk応答は、配列を取るためにコンストラクタをオーバーロードすることですが、私はJavascriptでそれを行うことはできません知っている。どのようにこれを行うと、まだ個々の引数を渡す任意のアイデア? (簡潔さのためにここに最初の例を使用して、btw) –
これを試してみましたが、うまくいきません: 'var canvasSprites = []; canvasSprites.push(this.get( 'repeater'))forEach(関数(リピータ){ )新しいCanvasSprite(リピータID、リピータ。幅、リピータ。高さ、リピータ.spriteSheetURL、リピータ。列、リピータ列、リピータ.totalFrames); })); this.set({canvasSprites}); ' –
ああ、コンストラクタはあなたが望むものに変更できます。この例では、配列ではなくオブジェクトです。このサンプルをどのように更新したのでしょうか、ES2015の構文がないと明確になりますか? – martypdx