让州政府经理切换我的观点时遇到了一些麻烦。我有一个状态机,它最初将显示登录屏幕,一旦用户通过身份验证,状态机将转换到授权状态并显示工作区或仪表板。问题是,当我加载页面时,我没有看到登录屏幕,所以我怀疑我错过了一些东西。我正在使用emberjs 0.9.7.1
这是我希望添加屏幕的div
<body>
<div id="main-container" class="container">
</div>
</body>
这是login_view.handlerbars文件的核心html片段(还有更多,但为了简洁起见我省略了它)。我可以看到这个编译并存储在Ember.TEMPLATES ['login_view']。
<form class="form-inline">
<fieldset>
<input type="text" name="email">
<input type="password" name="password">
<button id="sign-in-button" class="btn btn-primary">Sign In</button>
</fieldset>
</form>
这是关联的视图javascript文件
App.LoginView = Ember.View.extend({
templateName: 'login_view'
});
最后,这是我的状态机。我在控制台中看到“进入未授权状态”的消息,但我没有看到嵌入在指定div中的登录html。
App.sessionStates = Ember.StateManager.create({
rootElement: '#main-container',
initialState: 'unauthorized',
unauthorized: Ember.ViewState.create({
viewClass: App.LoginView,
enter: function(stateManager, transition) {
console.log("Entering unauthorized state");
},
exit: function(stateManager, transition) {
console.log("Exiting unauthorized state");
}
}),
authorized: Ember.ViewState.create({
view: App.WorkspaceView
})
})
欢呼声
答案 0 :(得分:1)
实际上文档是错误的,有点令人困惑。
他们告诉您,如果覆盖这些方法,则必须调用this._super()
,但他们忘记指定您也必须传递参数。
我使用此代码运行它:
enter: function(manager, transition) {
this._super(manager, transition);
}
或者如果你不关心这些论点:
enter: function() {
this._super.apply(this, arguments);
}
答案 1 :(得分:0)
我认为它应该是'view'而不是'viewClass'
unauthorized: Ember.ViewState.create({
viewClass: App.LoginView, // the key should be 'view'
<强>更新强>
这是一个快速示例,显示如何使用StateManager。 http://jsfiddle.net/lifeinafolder/GNr4M/
如果你想使用'enter'&amp; '退出'状态,一定要调用super()。参考:http://ember-docs.herokuapp.com/#doc=Ember.StateManager&src=false