2014-09-02 40 views
0

异步行动,我被卡住时,我想更新一个特定的动作后,我的控制器的内容:无法设置控制器的内容时​​,在EmberJS

this.set(“内容”,CL.myModel.findALL( ));

我没有使用烬数据或他们中的任何一个。

CL.myModel.findALL返回一个Ember promise,它返回它自己的回调结果。

实际上,我在路由器的setupController中做了同样的事情,它运行良好。 为什么它在控制器本身不起作用?

谢谢你的帮助。

回答

1

你应该这样做:

controller = this; 

CL.myModle.findALL().then(function(models) { 
    controller.set('content', models);  
}) 

我相信的原因,它的作品没有这Route#setupController是因为,在幕后,灰烬做类似上面的代码的东西与你的model挂钩的结果(这通常是一个承诺)。

另一种选择,你可以看看是DS.PromiseObject(这对于那些紧裹承诺和揭露它的履约价值为content承诺一个很好的抽象。你不得不从灰烬数据提取其打造虽然。

+0

谢谢您的快速答复,我也觉得这个解决方案,但在解算我的CL.myModle.findALL()承诺我需要处理数据,我无法立即显示来自Web服务的数据。没有办法通过获得承诺来设置内容? – Xiu 2014-09-02 16:36:41

+0

对不起 - 我的评论有点困惑。你的问题提到'CL.myModle.findALL()'返回一个承诺,所以我的答案中的代码是*只*设置你的控制器的内容,一旦承诺解决了(意味着数据可用)。 – sheldonbaker 2014-09-02 16:40:04

0

这里是我的模型的例子:

CL.myModle.reopenClass({ 
    findAll : function(){ 
     return CL.Utils.ajaxPromise(r) 
     .then(this.findByIdSuccess.bind(this), this.findByIdFailed.bind(this)); 
    }, 
    findByIdSuccess: function (data) { 
     var negotiation = CL.NegotiationModel.create(data); 
     this.setMembers(negotiation); 
     this.setParties(negotiation); 
     this.setVersions(negotiation); 

     return negotiation; 
    }, 
}) 

这里是我的控制器:

onRefresh : function(){ 
    this.set('content',CL.myModle.findAll()) 
} 

正如你可以在模型中看到第一部分我调用一些函数来做一些模型修改,然后我将它返回到findByIdSuccess回调函数。

我不能只返回我在承诺的“当时”检索到的数据。

我再次的问题,如果它仍然不明确:有没有什么办法让诺的数据,而这样做的:

CL.myModle.findALL().then(function(models) { 
    controller.set('content', models);  
}) 
相关问题