0

構造的/手続き的な質問があります。

だから私は非常に単純な ember アプリを持っていて、ember-data を使用しようとしていますが、「正しくやっている」かどうかはわかりません。ユーザーがインデックス テンプレートにアクセスすると、ユーザーの位置座標を取得し、そのハッシュをエンコードします (その部分は機能します)。次に、私のサーバーには、ハッシュされた座標にちなんで名付けられた「タイル」を格納するデータベースがあります(#/tiles/H1A2S3H4E5Dルートにヒットすると、適切にフォーマットされたJSONが返されます)。

返された各タイルを最初のページの下部にあるユーザーに表示する場合、次に何がしたいですか (ハン​​ドルバーがそれを行う場合)。

ハッシュ化されたコードを;DS.Modelにハードコーディングすると、タイルの があります。App.find(H1A2S3H4E5D)サーバーがクエリに適切に応答していることがわかります。ただし、返された JSON オブジェクトにアクセスする方法、またはそれをユーザーに表示する方法を理解できないようです。

いくつかのチュートリアル ビデオを見ましたが、それらはすべて古いルーターでは時代遅れのようです。

主に知りたいこと:
1. によって返される情報はどこにあるのかApp.find(); ライブ&アクセス方法は?
2.これを処理するためにテンプレート/ビューを構成する「正しい」方法は何ですか?
3. その ID (ハッシュ化された座標) を に渡すにはどうすればよいApp.findですか? グローバル変数として?またはより良い方法はありますか?

(私にとって)最大の問題は、ユーザーが最初にページにアクセスするまで、検索したIDが存在しないことです。(動的に生成されるため)ページが読み込まれたときにそれを取得することはできません。

必要に応じてフィドルを投稿できますが、コードを書くだけではなく、概念的/教育的な回答を探しています

4

2 に答える 2

0

私はまだEmberについても多くのことを学んでいますが、これは私の理解です. そこにあるガイドとチュートリアルに従うと、次のようになります。

App.TileController = Ember.ObjectController.extend();

App.TileRoute = Ember.Route.extend({
  setupController: function(controller) {
    controller.set('content', App.Tile.find(MYHASH));
  }
});

これが行うことは、特別なコンテンツ オブジェクトを結果に設定することです。したがって、オブジェクト コントローラーを宣言し、パラメーターを指定して find を呼び出すため、単一の結果が期待されることがわかります。の命名規則に従うビューとテンプレートTileが読み込まれます。そこで、Tile オブジェクトのプロパティにアクセスできます。

<p>{{lat}}</p><p>{{lng}}</p>

私はこれが時々少し神秘的に感じることを認めなければなりません. その核心はすべて命名規則にあります。さまざまなコントローラー、ルートなどすべてに名前を付ける方法をかなり具体的にする必要があります。それが確定したら、必要なデータをコントローラーのコンテンツにバインドするだけです。

1)「メモリ内」という一般的な答えは別として、.find()呼び出しは、どこに戻っても生きています。一般的に言えば、これはコントローラの「コンテンツ」プロパティで設定することを意図しています。

2)多かれ少なかれこれに答えましたが、一般的に言えば、ルートの名前を取り、それを基にしています。したがって、 routeTileRouteの場合、次のようになります。

  • TileController = Ember.ObjectController.extend
  • タイル = DS.Model.extend
  • TileView = Ember.View.extend
  • tile.handlebars

通常、すべてのハンドルバー ファイルを templates/ フォルダーに保存します。それらをより深くネストする場合は、ビュー オブジェクトでパスを指定するだけです。

App.TileView = Ember.View.extend({
  templateName: "tiles/show"
});

3) これはアプリによって異なります。一般的に言えば、ID は URL から取得するか、関数でローカルに構築する方が適切です。あなたはハッシュをエンコードしているので、関数でこれを行ってからfindを呼び出していると思います。Array コントローラについても、少し似たようなことをしています。

ハッシュを生成している時点がわからないので、オンロードとしましょう。setupController 関数だけでハッシュを生成できるはずです。

App.TileRoute = Ember.Route.extend({
  generateHashBasedOnCoords: function() {
    // ...
  },
  setupController: function(controller) {
    var MYHASH = this.generateHashBasedOnCoords();
    controller.set('content', App.Tile.find(MYHASH));
  }
});

それが役立つことを願っています。

于 2013-04-01T14:21:17.530 に答える