Google maps api 3 使用未加载的模型以编程方式查看

Google maps api 3 使用未加载的模型以编程方式查看,google-maps-api-3,ember.js,ember-data,Google Maps Api 3,Ember.js,Ember Data,我有一个模型: App.Checkin = DS.Model.extend({ latitude: DS.attr('string'), longitude: DS.attr('string'), time: DS.attr('number') }); 以及加载签入模型集合(使用余烬数据发出请求)的路由 然后在我的路线模板中 {{view App.MapView}} 我需要以编程方式访问模型,这样我就可以迭代模型中的每个项目,向映射添加一个pin 在我看来,我有 didInser

我有一个模型:

App.Checkin = DS.Model.extend({
  latitude: DS.attr('string'),
  longitude: DS.attr('string'),
  time: DS.attr('number')
});
以及加载签入模型集合(使用余烬数据发出请求)的路由

然后在我的路线模板中

{{view App.MapView}}
我需要以编程方式访问模型,这样我就可以迭代模型中的每个项目,向映射添加一个pin

在我看来,我有

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

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

在网络窗口中,对服务器的请求到那时还没有完成,因此它显然没有提供数据。(即使是这样,我也不知道如何查询这样的对象,预期的方法都不起作用(get/forEach))

我相信我需要观察模型的变化,并且已经尝试过了

updatePins: function() {
  debugger;
}.observes('context.content')
在视图的内部。我尝试过绑定各种东西,但从未调用过reRender。我已经试过这些建议了 通过尝试绑定到controller.content、context、App.Checkin等


在模型加载到视图内部后,我如何从模型中获取数据?

直到模型无法解析您得到的是该模型的承诺,显然承诺还不包含数据,但当服务器返回请求时。您可以通过观察
model.length
属性(例如使用
if
helper)来检查模板中的模型是否有数据,
if
helper块将在
length
属性在收到数据时更改此being时重新计算

例如,您可以尝试以下方法:

...
{{#if model.length}}
  {{view App.MapView}}
{{/if}}
...
这将确保在模型具有数据时渲染
App.MapView
,因此您也可以访问视图的
didInsertElement
hook中的数据

更新 您的
reRender
hook的名称稍有错误,它应该是
reRender

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

希望能有所帮助。

因此,这似乎可行,但我认为这会导致一些性能问题。如果在加载模型之前不渲染视图,则无法尽早加载dom,并且在加载模型时会出现回流。理想情况下,地图会立即显示,并且在加载模型时会显示管脚。此外,即使模型已加载,但服务器上有0个项目,这是否也可以工作?这似乎确实让didInsertElement有了一个加载的模型,但是这个.get(“context.model”).toArray()[0]。纬度存在,但没有定义(它为路由正确地呈现),公平地说,你仍然可以坚持你的
rerender
方法,它从未被调用的原因是你命名的钩子有点错误,与其说它应该是
reRender
,不如说它应该是
reRender
所有的小案例感谢你迄今为止的帮助,我很感谢你在这方面帮助我,我已经被困了一整天了。我不认为把它改成重播是解决办法。我相信这就是hook on视图的名称,但这与问题无关。该函数的更好名称可能是updatePins(我更改了原始帖子),因为我想在模型更改时在地图上重做pin,所以我需要观察模型的更改。即使如此,它仍然不会在context.content或context.model上触发
rerender: function() {
  debugger;
}.observes('context.content')