0

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

干杯

4

2 回答 2

1

实际上文档是错误的并且有点混乱。

他们告诉您,this._super()如果您覆盖这些方法,您必须调用,但他们忘记指定您也必须传递参数。

我使用以下代码运行它:

enter: function(manager, transition) {
  this._super(manager, transition);
}

或者如果你不关心这些论点:

enter: function() {
  this._super.apply(this, arguments);
}
于 2012-05-19T12:00:40.150 回答
0

我认为应该是“view”而不是“viewClass”

unauthorized: Ember.ViewState.create({
        viewClass: App.LoginView, // the key should be 'view'

更新:

这是一个快速示例小提琴,展示了如何使用 StateManager。http://jsfiddle.net/lifeinafolder/GNr4M/

如果您想使用“进入”和“退出”状态,请务必调用 super()。参考:http ://ember-docs.herokuapp.com/#doc=Ember.StateManager&src=false

于 2012-04-27T19:25:22.823 回答