把手不要等待Ember Ajax

时间:2015-11-26 12:21:17

标签: javascript ember.js handlebars.js

我的问题是把手没有为ajax请求完成。

我的控制台是这样的:

  1. 以&#34开始"来自控制器中的功能。
  2. 然后     模板中的{{log workouts}}未定义,因为     ajax尚未准备好。
  3. 最后来自请求的数据。
  4. 所以这是我的锻炼控制器代码的一部分

    workouts: function() {
            console.log("starting");
    
            this.get('session').authorize('authorizer:custom', (headerName, headerValue) => {
                var obj = {};
                obj[headerName] = headerValue;
    
                Ember.$.ajax({
                    type: "GET",
                    url: this.requestEndpoint,
                    headers: obj,
                }).success(function(data) {
                    console.log("ajax: "+JSON.stringify(data));
                    return data;
                }).error(function(error) {
                    return error;
                });
            }); 
      }.property()
    

    Handlebars Template就像这样:

    {{log workouts}}
    

    我该如何解决这个问题? 也许: 有没有办法将此代码转换为承诺?或者有一个"等待灰烬"选项?

1 个答案:

答案 0 :(得分:0)

在处理异步调用并仍想使用计算属性时,您可以执行 promiseObject promiseArray

workouts: function() {
        var ajaxCall = ....

        return DS.PromiseObject.create({
            promise: ajaxCall.then(function() {
               // Do customStuff
            });
        });
}.property('blah')

Handlebars Template看起来像这样:

{{workouts.content}}

但是,当您的属性依赖于另一个属性 .property('someId') 时,我才会看到使用此方法的重点。在这种情况下,您将无法对服务器进行查询没有给定的ID。因此,当这个ID出现时,它会触发锻炼钩子,并为您提供必要的queryParams ..