2016-09-13 97 views
-1

我搜索关于这一主题,并尝试多事情,但到目前为止一直未能解决我的问题在模板外部JSON数据,所以我创建了一个帐户,这样我就可以学习:)无法获取EmberJS

我正在学习EmberJS,我无法从EmberJS中的路由获取JSON数据以输出到实际模板。但是,路由中的Javascript警报会显示数据。

我打电话给第三方API,通过http从外部获取域的WHOIS信息。

例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." 
    ] 
} 

这里是我的代码。

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); 
     } 
     }); 
     } 
}); 

在我templates/file.hbs我已经尝试了各种东西拿到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和Promises。

为了与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