web-dev-qa-db-ja.com

ember.jsとサーバー

私はEmber.jsを見ており、ドキュメントを読んで、使用方法を試して理解しています。一つだけを除いて、私はそれを(かなりよく)得ます。 MVCパターンでの私の考え方では、モデルはアプリケーション内のデータのリポジトリです。 Ember.jsでクライアント側のデータに対してどのように機能するかを確認できます。私が取得できないのは、クライアントでデータが変更された場合にサーバーで変更が更新されるように、そのデータをサーバーに結び付ける方法です。およびその逆。私はこれまで、WebアプリケーションでAjax/JSONを呼び出してサーバーとやり取りしていましたが、Ember.jsを使用してそれを行う方法がわかりません。

42
writes_on

少し掘り下げて GitHubのemberjs これを見つけました: https://github.com/emberjs/data

Ember Dataは、永続層(JSON APIなど)からモデルをロードし、それらのモデルを更新してから変更を保存するためのライブラリです。 ActiveRecordのようなサーバーサイドORMにある多くの機能を提供しますが、ブラウザーのJavaScriptのユニークな環境向けに特別に設計されています。

Ember.js Live Collections を読むこともお勧めします。あなたが望むのは、サーバー側と同期する方法を知っているモデルのコレクションを持つことです、可能なコード例は次のとおりです:

_// our model
App.Person = Ember.Object.extend();

App.people = Ember.ArrayController.create({
  content: [],
  save: function () {
    // assuming you are using jQuery, but could be other AJAX/DOM framework
    $.post({
      url: "/people",
      data: JSON.stringify( this.toArray() ),
      success: function ( data ) {
        // your data should already be rendered with latest changes
        // however, you might want to change status from something to "saved" etc.
      }
    });
  }
});
_

その後、必要なときにApp.people.save()を呼び出します。

また、この記事 Ember.jsの使用に関するアドバイスと指示 も確認してください。Emberと言及もあります。 emberjs/data

:Emberjs Data Libraryは、本番環境では使用できないため、注意して使用する必要があります。

51
Misha Reyzlin

Ember.jsでは、Emberオブジェクトに含まれる「モデル」には、使用している場合、基礎となるサーバー側データベースのさらなる抽象化が含まれます。アプリケーションのコントローラー部分には、モデルを更新するために必要なときに呼び出される(Ajaxを使用して)データを取得および送信できるメソッドが必要です。これは、ユーザーがアプリケーションに提供する入力(キーストローク、マウスの動きなど)にクライアント側で迅速に応答し、サーバー側のデータベースに対して比較的コストのかかるクエリをいつ実行するかを選択できるモデルがあるためです。このようにして、外部サーバーへのデータ要求の遅延によってアプリのパフォーマンスの一部が妨げられることがなくなり、場合によっては、応答性がネイティブアプリに近いアプリケーションを作成できるようになります。

6
Peter Behr

私はこのようなペアでEmber.jsを描くのが好きです

  • ビューとテンプレートは(明らかに)相関しています。Views-Classを微調整してテンプレートを制御します(classNamesなど)
  • ルーターとルートは、MVCのコントローラーに少し似ています。彼らはリクエストを正しいエンドポイントにルーティングする責任があります
  • コントローラーとモデルはモデル中心であり、1つ(モデル)は、コントローラーが一種のプロキシ(または、デコレーター、それがあなたの路地にある場合)のように振る舞う間、アプリケーションで処理するデータを記述します。テンプレートは、たとえばコントローラーに接続し、

基本的に、コントローラー(単一または配列)にモデルをロードし、コントローラーでそのモデル(コア/データ内のモデルに触れないもの)で動作するプロセスを簡単にモデリングできることを意味します。ブログアプリケーションの例では、モデルにPostを記述し、コントローラーにそのようなものを追加します

App.PostController = Ember.ObjectController.extend({
  content: null,

  // initial value
  isExpanded: false,

  expand: function() {
    this.set('isExpanded', true)
  },

  contract: function() {
    this.set('isExpanded', false)
  }
});

これで、コントローラを介したフロントエンド思考の観点から、モデルの表現と対話できます。投稿を展開してもしなくても、モデルは変更されず、データのみが変更されます。

サーバーからデータをリロードするという点では、2つの答えがあります

  1. この記事 接続を理解するのに非常に役立ちました(そして単純ではありますが、単純なポーリング)
  2. Railsを使用している場合、今後のRails 4 Live、 この投稿とデモ を参照してください。
5
Ronald

これは少し古い質問ですが、ember.jsの最高評価のページにあるので、少し追加すると思いました。

最近、RESTfulデータバインディングを処理するために ember-model を使用しています。添えものは少ないですが、私のニーズにはかなりまともです。基本的に、モデルの機能を拡張して、標準のRESTインターフェイスを介してJSONオブジェクトをプッシュするサーバーと適切に統合します。

1
pfooti