我的目标是使用AFMotion的AFMotion::HTTP.get方法设置实例变量
我建立了一个Post模型。我想要一些类似的东西:
class Post
...
def self.all
response = AFMotion::HTTP.get("localhost/posts.json")
objects = JSON.parse(response)
results = objects.map{|x| Post.new(x)}
end
end
但根据文档,AFMotion需要某种看起来和行为都像异步javascript回调的块语法。我不确定如何使用它。
我想打电话给
ViewController中的@posts = Post.all
。这只是Rails的梦想吗?谢谢
是的,基本语法是异步的,所以在等待网络响应时不必阻塞UI。语法很简单,将所有要加载的代码都放在块中。
class Post
...
def self.all
AFMotion::HTTP.get("localhost/posts.json") do |response|
if result.success?
p "You got JSON data"
# feel free to parse this data into an instance var
objects = JSON.parse(response)
@results = objects.map{|x| Post.new(x)}
elsif result.failure?
p result.error.localizedDescription
end
end
end
end
既然你提到了Rails,是的,这是一个完全不同的逻辑。您需要将要运行的代码(在完成时)放置在异步块中。如果它将经常更改,或者与您的模型无关,则传递一个&块到yoru方法,并在完成后使用该方法进行回调。
我希望这能有所帮助!