【问题标题】:Ember js wait for controller this.get request / rest adapter lagEmber js等待控制器this.get请求/休息适配器滞后
【发布时间】:2014-02-25 07:18:40
【问题描述】:

我试图在其各自的控制器中访问我的模型的内容,但它最初返回一个带有未定义属性的承诺,然后在第二次或第三次访问时返回该值。

会不会是从 REST 适配器检索数据有延迟?

同时尝试在控制器中的请求上使用 '.then()' 也不起作用,因为我相信它只能在路由中使用。

App.EquipmentsController = Ember.ArrayController.extend({
    getContentForMapping: function() {
        console.log(this.get('model').objectAt(1).get('contractor.name'));
        //returns undefined first time 
    }
});

奇怪的是,当我从模板视图循环访问模型的属性时,它会立即返回它们。

{{#each equipment in model}}
   <p>{{equipment.contractor.name}}</p>
{{/each}}

以下是我设置路线的方式。它正在获取与特定站点相关的设备列表:

App.EquipmentsRoute = Ember.Route.extend({
  model: function(){
      //Get the model for the selected site and grab its equipment list.  
      return this.modelFor('site').get('equipment'); 
  },
  //Set the model we just grabbed above as the model to use in the controller
  setupController: function(controller, model) { 
    controller.set('model', model);
  }
});

【问题讨论】:

  • 我认为您不需要 setupController。这是默认实现。 setupController: function(controller, model) { controller.set('model', model); }
  • 如何调用 getContentForMapping?似乎这可能是一个时间问题,并且您在承诺解决之前调用了该函数。模板将等到promise 解决后才能呈现每个。你能发送一个 jsbin 来重现这个问题吗?
  • 嘿 Miguel,getContentForMapping 是通过更新字段来调用的。我尝试使用fixure适配器通过jsbin重现它,但问题似乎没有复制,这让我相信它与REST适配器相关。

标签: javascript ember.js


【解决方案1】:

更改我们的 API 端点以支持侧载似乎解决了我们在发出 this.get('model') 请求时遇到的延迟。

ember 指南中有一小部分介绍了这一点:http://emberjs.com/guides/models/the-rest-adapter/

【讨论】:

  • 我仍然很想知道如何在控制器中使用某种回调或承诺处理来发出 this.get() 请求
【解决方案2】:

我认为错误出在您的App.EquipmentsRoutesetupController 函数中。尝试设置 content 属性,而不是模型挂钩属性。

controller.set('content', model);

App.EquipmentsRoute = Ember.Route.extend({
  [...] 
  setupController: function(controller, model) { 
    controller.set('content', model);
  }
});

【讨论】:

  • 嘿,谢谢你的回答,但它似乎没有解决我的问题:(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-19
  • 1970-01-01
  • 2019-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多