4

シナリオは次のとおりです。

コントローラーの初期化時にデータをロードします。そしてロードが終わると。負荷データに応じてコンテナ要素のサイズを変更したい。ここに問題があります。コントローラーでビューにアクセスするにはどうすればよいですか?

ビューでdomを操作できることは知ってthis.$()いますが、コントローラーでdomにアクセスする方法、またはコントローラーでビューにアクセスする方法を教えてください。ここを使いEmber.Routerます。したがって、ビューとコントローラーを手動で作成しません。

http://jsbin.com/oxudor/edit#javascript,htmlここにコード サンプルを示します。コードを実行できませんが、私の問題を示すことができます。問題のあるコードにコメントを付けました。

4

2 に答える 2

7

コントローラーでdomで遊んではいけないと思います。それはMVCを壊します。おそらく 1 つの解決策は、コントローラーのコンテンツをリッスンするビューでオブザーバーを定義することです。このオブザーバーで、dom を操作します (ビュー内にいるので問題ありません)。@pangratz が示唆するように、いくつかのコードを使用して、より完全な回答を提供できる可能性があります。

編集:関連するビューにカルーセル機能を配置し、controller.loading プロパティを観察できると思います。ここで、this.$() を使用して、ビューの jquery オブジェクトを取得できます。

carousel: function() {
  var context = this.get('controller'), 
      self = this;

  if(context.get('loading') === false) {
    setTimeout(function() {
      var width = self.$('#page_wrapper').width(),
          num   = self.$('.page').size();
      self.$('#pages').width(width * num);
      self.$('.page').width(width);
      console.log([width, num]);
      console.log(context.get('elements'));
    }, 100);
  }
}.observes('controller.loading')

この助けを願って...

于 2012-07-17T07:05:51.217 に答える