2

我确信这与鞋子 > 手册 > 规则中提到的复杂性有关,但我就是不明白。如果有人愿意在下面的代码中解释为什么@var == nil ......我想我可以使用访问在我的应用程序中的不同视图之间切换,但如果我失去所有状态,这将不起作用。

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

它将匹配正则表达式的子组并将匹配的字符串作为参数传递给方法。偶尔有用,但很快就会变得笨拙。另一种解决方案是使用常量或类变量,_为什么在这里解释

好的,所以再胡闹,看起来所有实例变量都得到了

在 Shoes 子类中的每个方法的开头擦除。
没关系,我猜。那么,将一些数据
从一个鞋 URL 共享到另一个 URL 的首选方法是什么?在 URL 本身中将它从一个页面传递
到下一个页面是有效的——如果它是一个字符串。如果不是
字符串,你应该使用什么——@@class_variables?

当然,您可以使用类 var。这些保证会在应用程序的整个生命周期中持续存在。或者一个常数。

另外,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 回答