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')