2016-09-13 1 views
-1

私はこのトピックで検索したと複数のものを試してみましたが、今のところ私の問題を解決することができなかったでテンプレートでの外部JSONデータを取得することができませんので、私はので、私は学ぶことができ、アカウントを作成した:)EmberJS

EmberJSを学習していて、実際のテンプレートに出力するためにEmberJSのルートからJSONデータを取得できません。ただし、ルート上のJavascriptアラートによってデータが表示されます。

私は外部的にhttpを介してドメインのWHOIS情報を取得するサードパーティのAPIを呼び出しています。

例JSON出力

{ 
    "status": [ 
    "clientTransferProhibited https:\/\/icann.org\/epp#clientTransferProhibited" 
    ], 
    "updated_date": [ 
    "2012-12-04T00:00:00" 
    ], 
    "contacts": { 
    "admin": null, 
    "tech": null, 
    "registrant": null, 
    "billing": null 
    }, 
    "nameservers": [ 
    "adns1.apple.com", 
    "adns2.apple.com", 
    "nserver.apple.com", 
    "nserver2.apple.com", 
    "nserver3.apple.com", 
    "nserver4.apple.com", 
    "nserver5.apple.com", 
    "nserver6.apple.com" 
    ], 
    "expiration_date": [ 
    "2021-02-20T00:00:00" 
    ], 
    "creation_date": [ 
    "1987-02-19T00:00:00" 
    ], 
    "raw": [ 
    "\n Domain Name: APPLE.COM\n Registrar: CSC CORPORATE DOMAINS, INC.\n Sponsoring Registrar IANA ID: 299\n Whois Server: whois.corporatedomains.com\n Referral URL: http:\/\/www.cscglobal.com\/global\/web\/csc\/digital-brand-services.html\n Name Server: ADNS1.APPLE.COM\n Name Server: ADNS2.APPLE.COM\n Name Server: NSERVER.APPLE.COM\n Name Server: NSERVER2.APPLE.COM\n Name Server: NSERVER3.APPLE.COM\n Name Server: NSERVER4.APPLE.COM\n Name Server: NSERVER5.APPLE.COM\n Name Server: NSERVER6.APPLE.COM\n Status: clientTransferProhibited https:\/\/icann.org\/epp#clientTransferProhibited\n Updated Date: 04-dec-2012\n Creation Date: 19-feb-1987\n Expiration Date: 20-feb-2021" 
    ], 
    "whois_server": [ 
    "whois.corporatedomains.com" 
    ], 
    "registrar": [ 
    "CSC Corporate Domains, INC." 
    ] 
} 

は、ここに私のコードです。私templates/file.hbs

routes/file.js

import Ember from 'ember'; 

export default Ember.Route.extend({ 
    titleToken: "MyTitle", 
    model() { 
     $.ajax({ 
     type: "GET", 
     url: "https://api.who.pm/apple.com", 
     dataType: "json", 
     success: function(jsonData) { 
      alert(JSON.stringify(jsonData)); 
      return jsonData; 
     }, 
     error: function(request, status, error) { 
      console.log("Error! " + request.responseText); 
     } 
     }); 
     } 
}); 

しかし私は成功していない、jsonData出力を得るために、物事の様々なを試してみました。私は{{model}}{{model.data}}、その他のいくつかを試しました。今のところ私はちょうどテンプレートでデータ出力を取得しようとしています。

ページの実行時に警告が正常に起動します。

ご協力いただければ幸いです。 ありがとうございます

+0

あなたはここで見たことが: http://stackoverflow.com/questions/19982257/ember-js-handlebars-render-vs-outlet-vs-partial-vs-viewを-vs-control –

+0

@ScottFanetti私はちょっと見ましたが、私は経験不足でお詫びしますが、このケースではどのように適用されるのか分かりません。私はメインの 'application.hbs'に' {{outlet}} 'を使っていますが、他のルートはこのページには表示されません。 – Taha

答えて

1

モデルフックは、約束または実際のデータを返す必要があります、何も返しません。

return jsonDataは、モデルフックではなく、成功関数を返します。成功フックが呼び出されるまでに、モデルフックは既に返されています。

JavaScriptの機能、コールバック、クロージャについて自分自身に知らせることを強く推奨します。また、thisと約束を理解していることを確認してください。

jQueryでの使用については、jQuery 2.x .ajax()が返す可能性があることを知る必要がありますが、これはお約束ではありません。これはjQuery 3.xで修正されています。だから今RSVP.resolveを使用しないために:

model() { 
    return Ember.RSVP.resolve($.ajax({ 
    type: "GET", 
    url: "https://api.who.pm/apple.com", 
    dataType: "json", 
    })); 
} 
+0

ありがとう、本当に私はこれがどのように機能するかもっと研究する必要があります... – Taha