emberjs StateMachine和ViewState的问题

时间:2012-04-27 05:00:10

标签: ember.js

让州政府经理切换我的观点时遇到了一些麻烦。我有一个状态机,它最初将显示登录屏幕,一旦用户通过身份验证,状态机将转换到授权状态​​并显示工作区或仪表板。问题是,当我加载页面时,我没有看到登录屏幕,所以我怀疑我错过了一些东西。我正在使用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
    })
})

欢呼声

2 个答案:

答案 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