已弃用的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的插座?我想要一个只有默认“/”路线的单页应用程序?
谢谢,
稻谷
答案 0 :(得分: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
用于简单的两态情况,但更复杂的例子可能会令人困惑。
这会有帮助吗?它不需要直接使用ContainerView
进行混乱,而是依赖于处理ContainerView
块的隐式{{#if}}
,并根据StateManager
的状态创建视图。 / p>