Ember.js 在ember中,如何在ember.Object.extend上创建可用于访问json服务的类方法
很抱歉问这样一个简单的问题,但我正在考虑从jQuery迁移到Ember,并尝试在不使用Ember数据的情况下调用/响应json。我的一个问题是人们如何建议使用课堂教学法。例如,我有一个如下的post对象:Ember.js 在ember中,如何在ember.Object.extend上创建可用于访问json服务的类方法,ember.js,Ember.js,很抱歉问这样一个简单的问题,但我正在考虑从jQuery迁移到Ember,并尝试在不使用Ember数据的情况下调用/响应json。我的一个问题是人们如何建议使用课堂教学法。例如,我有一个如下的post对象: Hex.Post = Ember.Object.extend({ id: null, body: null }); 一个合理的findById会像这样吗 $(document).ready(function(){ Hex.Post.findById=function(id){
Hex.Post = Ember.Object.extend({
id: null,
body: null
});
一个合理的findById会像这样吗
$(document).ready(function(){
Hex.Post.findById=function(id){
console.log("you are here");
$.getJSON("/arc/v1/api/post/" + id, function(data){
var post = Hex.Post.create();
post.set('id', data.id);
post.set('body',data.body);
return post;
});
};
});
或者创建findById类方法是错误的
当我从chrome控制台运行此命令时,它返回为未定义,即使JSON调用在浏览器中工作正常。我做错了什么
thx
从CHROME控制台:
您希望在类中定义它,然后返回ajax调用,这是一个承诺
Hex.Post = Ember.Object.extend({
id: null,
body: null
});
Hex.Post.reopenClass({
findById: function(id) {
return Ember.$.getJSON("/arc/v1/api/post/" + id).then(function(data){
var post = Hex.Post.create();
post.set('id', data.id);
post.set('body',data.body);
return post;
});
}
});
使用承诺
Hex.Post.findById(42).then(function(record){
console.log(record);
});
从一个模型挂钩,余烬将为您解决承诺,例如下面的例子
Hex.PostRoute = Em.Route.extend({
model: function(param){
return Hex.Post.findById(param.id);
}
});
作为承诺
Hex.Post.findById(42).then(function(record){
console.log(record);
});
或
下面是一个简单的例子:
thx提供了极好的答案。不过有一个简单的问题,我正试图通过Chrome控制台(我认为这是最后一种调用方式)对此进行测试,但它返回为未定义(见上面的屏幕截图)。这是我不知道什么是促销吗?我是否有对承诺的引用并需要将其转换为Post对象?因为这是一个异步调用,所以承诺是必需的,传递到
的函数在承诺解析时被调用。但是承诺永远不会转换为承诺的结果,因此您需要通过then访问它,或者通过then引用外部var。重要的是要注意,如果在代码中同步运行,这不会打印出来。这是一个多么彻底的答案!感谢您提供的多个示例。