4

今のところ、残り火なしでユーザーのログイン/登録を処理していますが、残り火内でユーザープロファイルを処理したいと思います(プロファイルを編集します)。現在のユーザーを処理するシングルトンモデルを作成するための最善の行動は何でしょうか?単純なユーザーを次のように定義しました。

App.User = DS.Model.extend({
    email: DS.attr('string'),
    name: DS.attr('string'),
});

入力することはできますが、-App.ready以外の方法でそれを行う方法がApp.User.find(id)よくわかりません。IDがわかりません。私のサーバーは、このセッションから現在ログインしているユーザーを返すことができますが、この場合、それをどのように使用しますか?それとも私はこれを間違った方法で扱っていますか?

ありがとう

4

2 に答える 2

4

Discourseは、現在のユーザーの情報をベースHTMLページに埋め込み、Userアプリケーションルートのモデルにプリロードします。

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/routes/application_route.js

Userモデルには、ユーザーのプロファイルなどにアクセスするための十分な情報があります。

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse/models/user.js

セッション固有の項目(ログアウトなど)は、別の/session/URLにアクセスします。

https://github.com/discourse/discourse/blob/master/app/assets/javascripts/discourse.js#L169

/session/セッションを使用していて、現在のユーザー情報をベースHTMLページに埋め込まないようにしたい場合(コンテンツを静的に提供している場合など) 、現在ログインしているユーザーを返すセッション固有のURL(など)に手動でアクセスすることもできます。現在のセッションに応じた情報。

于 2013-03-27T13:41:49.837 に答える
4

私は基本的にあなたが説明していることをします。以下のコードを使用してバックエンドを呼び出し、現在ログインしているユーザーを取得して、Emberアプリケーションに設定します。

var App = Ember.Application.create({
    LOG_TRANSITIONS: true,
});

App.deferReadiness();

$.ajax({
    url: 'http://localhost:3000/login',
    dataType: 'json',
    success: function (resp) {
        console.log(resp.user);

        App.store.load(App.User, resp.user._id, resp.user);
        App.store.load(App.Company, resp.company._id, resp.company);

        var user = App.User.find(resp.user._id);
        var company = App.Company.find(resp.company._id);

        App.CurrentUserController.reopen({
            content: user
        });

        App.CurrentCompanyController.reopen({
            content: company
        });

        App.advanceReadiness();
    },
    error: function (resp) {
        console.log('failed: ' + resp);
        App.advanceReadiness();
    }
});

App.initialize();
于 2013-03-27T18:28:09.577 に答える