1

Ember アプリケーションがあり、three.js とその CSS レンダラーを使用して、ビューの配列を 3D で表示しています。

問題は、three.js が処理を実行すると、コントローラー/ビューまたはルーターを介してビューのクリック イベントをキャッチできなくなることです。

Emberビューでクリックイベントをプログラムでトリガーする方法を知っている人はいますか? 私は「data-ember-action」値にアクセスでき、これを使用してバインドされたイベントを見つけて実行できることを望んでいました。

4

3 に答える 3

1

Ember ビューでのイベントのキャプチャに関する最後のコメントを参照すると、これは、キャプチャするイベントの名前を使用して、そのビューで関数/フックを定義するだけで機能します。

App.MyView = Ember.View.extend({
  click: function(event) {
    alert("clicked!");
  },

  doubleClick: function(event) {
    alert("double clicked!");
  }
});

ember でのイベント処理の詳細については、ember ガイドを参照してください。

それが役に立てば幸い

于 2013-05-18T20:47:41.313 に答える
1

idインスタンスの HTML属性を何らかの方法で取得できる場合はView、次を使用してそれを行うことができます

Ember.View.views["#the-view-id"].click()

ビュー ID の取得

  • クラス定義 elementId中に次のように手動で設定できますView
    Ember.View.extend({elementId: 'ビュー ID'})
    
  • または、IDがemberによってプログラムで生成された場合、jQueryクラス名などを使用して要素を取得するために 使用できます
    element.attr("id")

お役に立てれば...

于 2013-05-20T06:34:28.977 に答える
0

並べ替えました。Ember.js で Three.js を使用する場合のイベント伝播/Ember バインディングの問題を説明するその他のユーザー向け。私が抱えていた問題は、Three.js がシーンを作成し、それを既存の DOM 要素に追加していたことです。

renderer = new THREE.CSS3DRenderer();
renderer.setSize( window.innerWidth, window.innerHeight );
document.getElementById( 'container' ).appendChild( renderer.domElement );

Ember.Application を作成する際に、ルート要素を指定しました。

window.App = Ember.Application.create({
  VERSION: '0.1.0',
  LOG_TRANSITIONS: true,   
  rootElement: '#column',
  ready: function() {}
});

Three.js は ember ビューをコンテナー div に移動するため、Ember.eventDispatcher を介してイベントを探している #column div では見つかりません。

これを解決するために、rootElement 宣言をコメントアウトしました。名前付きテンプレートがあり、レンダリング先のページで {{outlet}} を受け取ったので、Ember はこれなしでビューをページに入れることができました。次に、Three.js がビューを #container div に移動したとき、Ember は引き続きそれらのイベントを監視できました。

于 2013-05-18T22:21:40.927 に答える