2

これは、Shoes > Manual > Rules に記載されている複雑さと関係があると確信していますが、わかりません。誰かが次のコードで @var == nil の理由を説明したい場合... アプリケーションの異なるビューを切り替えるために visit を使用できると思っていましたが、すべての状態を失うとうまくいきません。

class MyShoe < Shoes
  url '/', :index
  url '/somewhere', :somewhere

  def index
    @var = para link( "go somewhere", :click => "/somewhere" )
  end

  def somewhere
    para "var = #{@var.inspect}"  
  end
end

Shoes.app
4

1 に答える 1

2

_なぜ彼自身がこの問題に答えたのか、それについてはすぐに説明します。まず、異なる URL 間でデータ (具体的には文字列) を渡す最も簡単な方法は次のとおりです。

class MyShoe < Shoes
  url '/', :index
  url '/somewhere/(\d+)', :somewhere

  def index
    @var = para link( "What is 2 + 2?", :click => "/somewhere/4" )
  end

  def somewhere(value)
    para "2 + 2 = #{value}"  
  end
end

Shoes.app

正規表現のサブグループに一致し、一致する文字列をパラメーターとしてメソッドに渡します。たまには便利ですが、急ぐと扱いにくくなります。他の解決策は、定数またはクラス変数を使用することです。その_理由は次のとおりです。

OK、さらにいじってみると、すべてのインスタンス変数が取得されるように見えます

Shoes サブクラス内のすべてのメソッドの先頭で消去されます。
それは大丈夫だと思います。
では、ある靴の URL から別の靴の URL にデータを共有するには、どのような方法が望ましいでしょうか?
文字列の場合、URL 自体で1 つのページから次のページに渡すことができます。文字列でない場合
、何を使用する必要がありますか -- @@class_variables?

確かに、クラス変数を使用できます。これらは、アプリの存続期間を通じて保持されることが保証されています。または定数。

また、ShoesにはSQLite3が付属しており、そこにデータを渡すことができます。

あなたの例では、次のようになります。

class MyShoe < Shoes
  url '/', :index
  url '/somewhere', :somewhere

  def index
    @@var = para link( "go somewhere", :click => "/somewhere" )
  end

  def somewhere
    para "var = #{@@var.inspect}"  
  end
end

Shoes.app
于 2009-08-18T17:24:25.807 に答える