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");
}

和数据是

类 {type: function, store: Class, isLoaded: true, isUpdating: true, toString: function…}

在网络窗口中,此时对服务器的请求还没有完成,所以它显然没有数据可提供。(即使这样做了,我也不知道如何查询这样的对象,没有任何预期的方法有效(get/forEach))

我相信我需要观察正在改变的模型,并尝试过

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

视图内部。我尝试绑定到各种东西,但从未调用过 reRender。我 通过尝试绑定到 controller.content、context、App.Checkin 等,尝试了有关 Google 地图标记的 Emberjs 视图绑定的建议。

一旦模型加载......在视图内部,我该如何从模型中获取数据?

4

1 回答 1

1

直到模型没有解决你得到的是该模型的承诺,显然承诺不包含数据,但是当请求从服务器返回时。model.length如果模型有数据,您可以检查您的模板,例如通过使用if助手观察属性,当属性更改此蜜蜂时,助手块将在收到数据时if重新评估。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 回答