3


已弃用的 Ember.ViewState 的替代方案是什么?我尝试使用 Ember.State 代替 ContainerView 等,但无法加载视图。如果有人可以提供帮助(最好有任何示例),那就太好了。

(无法共享整个代码,因为它正在进行中)

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 的 outlet?我想要一个只有默认“/”路由的单页应用程序?

谢谢,
稻田

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}}

这是一个公认的简单示例,通常不会将 aStateManager用于简单的两态情况,但更复杂的示例可能会令人困惑。

这会有帮助吗?它不需要直接弄乱 aContainerView而是依赖于隐式ContainerView处理{{#if}}块并根据StateManager.

于 2014-06-22T16:26:19.763 回答