0

私はモデルを持っています:

App.Checkin = DS.Model.extend({
  latitude: DS.attr('string'),
  longitude: DS.attr('string'),
  time: DS.attr('number')
});

そして、チェックインモデルのコレクションをロードするルート(ember-dataでリクエストを行う)

model: function() {      
  return this.store.find('checkin');
}

そして、私が持っているルートのテンプレートで

{{view App.MapView}}

また、モデル内の各アイテムを反復処理してマップにピンを追加できるように、プログラムでモデルにアクセスする必要があります。

私の見解の中で私は持っています

didInsertElement: function() {
   var data = this.get("context.content");
}

データは

クラス {タイプ: 関数、ストア: クラス、isLoaded: true、isUpdating: true、toString: 関数…}

ネットワーク ウィンドウでは、サーバーへの要求はその時点までに完了していないため、提供するデータがないことは明らかです。(あったとしても、そのようなオブジェクトを照会する方法がわかりません。期待されるメソッドはどれも機能しませんでした (get/forEach))

モデルが変更されるのを観察する必要があると信じており、試してみました

updatePins: function() {
  debugger;
}.observes('context.content')

ビューの内側。いろいろとバインドしてみましたが、reRender が呼ばれたことはありません。 controller.content、context、App.Checkin などにバインドしようとすることで、Google マップ マーカーの Emberjs ビュー バインディングに関する推奨事項を試しました。

モデルがロードされたら、ビュー内でモデルからデータを取得するにはどうすればよいですか?

4

1 に答える 1

1

モデルが解決しないまで、取得したものはそのモデルの約束です。明らかに、約束にはまだデータが含まれていませんが、リクエストがサーバーから戻ってきたときです。model.lengthたとえばヘルパーを使用してプロパティを観察することにより、モデルにデータがあるかどうかをテンプレートにチェックインできます。データを受信したときにプロパティがこのビーイングを変更するとififヘルパー ブロックが再評価されます。length

たとえば、次のようなことを試すことができます。

...
{{#if model.length}}
  {{view App.MapView}}
{{/if}}
...

これにより、モデルにデータがある場合にレンダリングされることが保証されるため、期待どおりApp.MapViewにビューのフック内のデータにもアクセスできます。didInsertElement

アップデート

フックreRenderの名前が少し間違っています。rerender

rerender: function() {
  debugger;
}.observes('context.content')

それが役に立てば幸い。

于 2013-10-05T08:50:08.267 に答える