我有一个模特:
App.Checkin = DS.Model.extend({
latitude: DS.attr('string'),
longitude: DS.attr('string'),
time: DS.attr('number')
});
通过
加载checkin模型集合(使用ember-data发出请求)的路径model: function() {
return this.store.find('checkin');
}
然后在我有路线的模板中
{{view App.MapView}}
我需要以编程方式访问模型,以便我可以迭代模型中的每个项目以向地图添加图钉。
在我看来,我有
didInsertElement: function() {
var data = this.get("context.content");
}
和数据
Class {type:function,store:Class,isLoaded:true,isUpdating:true,toString:function ...}
在网络窗口中,到那时对服务器的请求尚未完成,因此显然不会提供数据。 (即使它确实如此,我也不知道如何查询这样的对象,没有预期的方法有效(get / forEach))
我相信我需要观察正在改变的模型,并尝试过
updatePins: function() {
debugger;
}.observes('context.content')
在视图内部。我试过绑定各种各样的东西,但reRender从未被调用过。我已尝试Emberjs view binding for Google maps markers上的建议 尝试绑定到controller.content,context,App.Checkin等。
如果从模型中加载了......在视图内部,我该如何从模型中获取数据?
答案 0 :(得分:1)
直到模型没有解决你得到的是对该模型的承诺,显然,promise还没有包含数据,但是当请求从服务器返回时。您可以在模板中检查模型是否有数据,通过观察model.length
属性,例如使用if
帮助器,if
辅助块将在{{1}时重新评估}属性在收到数据时会更改此信息。
例如,您可以尝试这样的事情:
length
这将确保您的模型具有数据时呈现...
{{#if model.length}}
{{view App.MapView}}
{{/if}}
...
,因此您还可以按照预期访问视图App.MapView
挂钩中的数据。
您的didInsertElement
挂钩名称略有错误,应为reRender
rerender
希望它有所帮助。