<編集>
コメントで言ったように、この質問は一度に多くの質問をするので、フォローアップするために、進行中のフィドルがあります: http://jsfiddle.net/schawaska/dWcUp/
これは 100% ではありませんが、いくつかの質問をカバーしています。FixtureAdapter を使用します。時間を見つけて更新していきます。
</編集>
1 PHP スクリプトから JSON データを取得する ajax リクエストを作成する
Ember-Data がそれを処理します。次の点を考慮してください。
window.App = Em.Application.create();
App.Store = DS.Store.extend({
revision: 12,
adapter: 'DS.RESTAdapter'
});
App.Product = DS.Model.extend({
name: DS.attr('string'),
imageUrl: DS.attr('string')
})
上記のコードは、クライアント アプリ内のデータ ストア (ORM とほとんど同じ) を定義します。/products
Ember は設定より規約を (かなり) 使用するため、設定に従って、このコードは、バックエンドが GET、POST、PUT、および DELETE と対話するのと同じドメインにリソースを持っていることを期待します。
2 その情報を DataStore モデルに挿入する
上記のことを考慮して、次のいずれかを呼び出します。
App.store.find(App.Product)
またApp.Product.find()
EmberData は、リソースを対象とする AJAX を介して GET リクエストを発行/products
しApp.Product.find(1)
ます/products/1
。アプリは、そのアダプターとアダプターstore
を使用して、JSON の結果を変換し、そのデータをモデルに具体化します。adapter
serializer
App.Product
3 それらのモデルをコントローラー内に保存する
これは、アプリケーション ルーターを定義するときに行います。何をするにしても、Ember は独自のワークフローを実行しますが、いくつかのフックを提供して、その特定のアクションを制御できるようにします。次の点を考慮してください。
App.Router.map(function() {
this.resource('products');
});
App.ProductsRoute = Ember.Route.extend({
model: function() {
return App.Product.find();
}
});
上記のコードは、ルート ( http://yourdomain.com/#/productsproducts
でアクセスする) で使用されるモデルを設定します。内部的には、 のコードを生成するか、独自に定義して、 を拡張する必要があります。コントローラーには、モデルまたはモデル コレクションのエイリアスであるプロパティがあります。繰り返しますが、構成よりも規則です。ProductsController
ArrayController
content
4 handlebars テンプレートで {{#each}} を使用して情報を表示する
規則に従っている場合、handlebars テンプレートで、次のようにコレクションを反復処理する必要があります。
{{#each product in controller}}
{{#linkTo 'product' product}}
{{product.name}}
{{/linkTo}}
{{/each}}
- ember-data には、データを取得する方法が組み込まれていますか? そうでない場合、AJAX リクエストはどこに実装する必要がありますか?
はい、製品モデルを呼び出すだけで、バックエンドの製品リソースに AJAX リクエストを発行しているApp.Product.find()
ときに空白が返され、サーバーからデータが返されたら、データを各モデルに具体化/入力します。ModelArray
- JSON データを DS モデルに挿入する最良の方法は何ですか?
ember-data を使用している場合は、これについて心配する必要はありません。ほとんどの場合、フレームワークがそれを行います。それが私たちがそれを愛する理由です。ただし、バックエンドによっては、マッピング、名前空間、および複数形を構成する必要がある場合があります。
- モデルをコントローラーと同期する最良の方法は何ですか?
これに似たもの:
var product = App.Product.createRecord({
name: 'laptop',
imageUrl: 'path/to/image.png'
});
product.save();
これにより、バックエンド API へのPOST
orリクエストが起動されます。PUT
あなたは間違いなくチェックする必要があります:
http://emberjs.com/guides/
https://peepcode.com/products/emberjs
http://toranbilllups.com/blog/archive/2013/01/03/Intro-to-ember-js-and-the-new-router-api/