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

「viewClass」ではなく「view」であるべきだと思います

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

アップデート:

StateManager の使用方法を示すフィドルの簡単な例を次に示します。http://jsfiddle.net/lifeinafolder/GNr4M/

'enter' および 'exit' 状態を使用する場合は、必ず super() を呼び出してください。参照: http://ember-docs.herokuapp.com/#doc=Ember.StateManager&src=false

于 2012-04-27T19:25:22.823 に答える