用于设置变量的 AFMotion HTTP GET 请求语法

AFMotion HTTP GET request syntax for setting variable

我的目标是使用 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 回调。我不确定如何使用它。

我希望能够打电话给

@posts = Post.all 在 ViewController。这只是一个 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,是的,这是一个不同的逻辑。您需要将要 运行(完成时)的代码放在异步块中。如果它会经常改变,或者与你的模型无关,那么将一个 &block 传递给 yoru 方法,并在它完成时使用它来回调。

希望对您有所帮助!