3


廃止された Ember.ViewState の代替手段は何ですか? ContainerView などで代わりに Ember.State を使用してみましたが、ビューが読み込まれませんでした。誰かが(できれば例を挙げて)助けることができれば、それは素晴らしいことです。

(進行中のため、コード全体を共有することはできません)

newState: Ember.State.create({
        ...
        view: Ember.ContainerView.create({
            childViews: [ Dashboard.ChartView.create() ]
        }),
});

また、特にレイアウトとアウトレットに問題があるかどうかを知りたい場合は、ビューがレンダリングされない理由をデバッグする方法を教えてください。アウトレットは StateManager と連携しますか? 現在、index.html に次のものしかないと仮定します。これで十分でしょうか (私は Ember AnimatedOutlet を使用しています)?

<script type="text/x-handlebars" data-template-name="application">
    {{animatedOutlet name="main"}}
</script>

新しい Ember 仕様では、ルートを使用せずに StateManager でアウトレットを使用する方法は? デフォルトの "/" ルートのみを持つ単一ページのアプリが必要ですか?

ありがとう、
パディ

4

1 に答える 1

0

この種の問題については、通常、Ember.StateManager別のember-statesプロジェクトから を作成します。次に、ページのさまざまな部分を表示するかどうかを決定するプロパティをコントローラーで計算しました。次に、テンプレートで、指定された状態の{{#if shouldShowPartX}} ... {{\if}}場合にのみ表示される型ステートメントを使用しStateManagerます。より完全な例を次に示します。

  App.MyController = Ember.Controller.extend({
    isOpen: Ember.computed.equal('panelManager.currentState.name', 'open')
    init: function() {
      this._super();
      # Create the state manager instance from the class defined on this controller.
      this.set('panelManager', this.PanelManager.create());
    },
    reset: (function() {
      this.get('panelManager').send('reset');
    }).on('init'),
    PanelManager: Ember.StateManager.extend({
      initialState: 'open',
      open: Ember.State.create({
        # If already open do nothing.
        open: function(manager) {},
        # Close the panel
        shrink: function(manager) {
          manager.transitionTo('closed');
        },
      }),
      closed: Ember.State.create({
        # If already closed, do nothing
        shrink: function() {},
        # Open the panel
        open: function(manager) {
          manager.transitionTo('open');
        },
      }),
      reset: function(manager) {
        manager.transitionTo(manager.get('initialState'));
      }
    })
  });

次に、私の見解では、次のようなことができます。

{{#if isOpen}}
  <div class="panel panel-open"> ... </div>
{{else}}
  <div class="panel panel-closed"> ... </div>
{{/if}}

これは明らかに単純化された例でありStateManager、単純な 2 状態の状況では通常 a を使用しませんが、より複雑な例はおそらく混乱を招くでしょう。

これは役に立ちますか?を直接いじる必要はなく、ブロックを処理して の状態に応じてビューを作成ContainerViewする暗黙の に依存しています。ContainerView{{#if}}StateManager

于 2014-06-22T16:26:19.763 に答える