EmberJS使用未加载的模型以编程方式查看

时间:2013-10-05 08:45:51

标签: 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')
});

通过

加载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等。

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

1 个答案:

答案 0 :(得分:1)

直到模型没有解决你得到的是对该模型的承诺,显然,promise还没有包含数据,但是当请求从服务器返回时。您可以在模板中检查模型是否有数据,通过观察model.length属性,例如使用if帮助器,if辅助块将在{{1}时重新评估}属性在收到数据时会更改此信息。

例如,您可以尝试这样的事情:

length

这将确保您的模型具有数据时呈现... {{#if model.length}} {{view App.MapView}} {{/if}} ... ,因此您还可以按照预期访问视图App.MapView挂钩中的数据。

更新

您的didInsertElement挂钩名称略有错误,应为reRender

rerender

希望它有所帮助。