我有一个Rails应用程序,我在其中呈现存储在模型属性中的一块Haml内容.在Haml的那个块中使用Rails视图助手会很不错.目前,我在视图助手中使用Haml :: Engine#render来呈现此模型属性的内容.它工作得很好,但我不能使用像= link_to这样的东西.为了说明问题:
irb(main):003:0> haml_text=<<"EOH"
irb(main):004:0" %p
irb(main):005:0" =image_tag 'someimage'
irb(main):006:0" EOH
=> "%p\n =image_tag 'someimage'\n"
irb(main):007:0> engine = Haml::Engine.new(haml_text)
=> #<Haml::Engine:0x7fa9ff7f1150 ... >
irb(main):008:0> engine.render
NoMethodError: undefined method `image_tag' for #<Object:0x7fa9ff7e9a40>
from (haml):2:in `render'
from /usr/lib/ruby/gems/1.8/gems/haml-3.0.25/lib/haml/engine.rb:178:in `render'
from /usr/lib/ruby/gems/1.8/gems/haml-3.0.25/lib/haml/engine.rb:178:in `instance_eval'
from /usr/lib/ruby/gems/1.8/gems/haml-3.0.25/lib/haml/engine.rb:178:in `render'
from (irb):8
Run Code Online (Sandbox Code Playgroud)
有关如何做到这一点的任何想法?
好主意?
我希望在浏览器中重用我为NodeJS编写的模板,这样我希望获得快速页面加载时间(初始渲染)和动态内容切换能力等...
这在Node上是最自然的,兼容模板引擎的任何想法?
顺便说一下,我喜欢HAML风格的语法,所以基于HAML的任何东西都是一个巨大的优势.
谢谢!罗马
编辑:我认为我最喜欢Mustache的方法,它适用于Express,也适用于客户端..这里将更新实现如何...
我对Ruby on Rails很新,甚至比Haml更新,我2小时前开始使用它.所以我遵循Ruby on Rails教程并决定在视图上使用Haml,但我不确定这是否是显示事物的正确方法(感觉有点奇怪).有人可以开导我吗?:)
%h1= "About Us"
%p
=link_to 'Ruby on Rails Tutorial','http://railstutorial.org'
&= 'is a project to make a book and screencasts to teach web development with'
&= link_to 'Ruby on Rails', 'http://rubyonrails.org'
&= '. This is the sample application for the tutorial.'
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
:ruby
first_link = link_to 'Ruby on Rails Tutorial','http://railstutorial.org'
second_link = link_to 'Ruby on Rails', 'http://rubyonrails.org'
%h1= "About Us"
%p
= first_link
&= 'is a project to make a book and screencasts to teach web …Run Code Online (Sandbox Code Playgroud) 我宁愿在django中使用像HAML这样的东西,但似乎有一些替代品,我无法区分它们之间的区别:
谁能分享他们的经历?
哪个最好/最容易使用django?
谢谢.
编辑:感谢true_religion,
在Rails中使用视图模板作为'.html.haml'和简单地'.haml'之间有什么区别?例如,
show.html.haml
vs
show.haml
使用一个优于另一个有什么特别的优势吗?或者其中一个是标准做法?同样的问题也适用于其他类型的模板,例如'.erb'.
我在我的sinatra应用程序中使用内联haml模板.我有一个@@layout像这样的部分:
#message
- if flash[:notice]
%section.notice= flash[:notice]
- if flash[:error]
%section.error= flash[:error]
Run Code Online (Sandbox Code Playgroud)
当我使用flash[:notice]="你好!" 在路线中点击一个链接,下一页愉快地说"你好"在#messagediv中.很棒.
所以这就是问题所在,我正在使用right.js为我的应用程序添加一些ajax的好处,机架式闪存的行为充其量是不一致的.
大多数情况下,你单击一个链接(.linkey),一点点javascript拦截它并加载到#contentdiv(这部分也可以),然后重新加载'#message'div并显示前一个动作的flash ...下次单击链接时...大约80%的时间,其余时间没有显示任何内容.
这是我的js:
"a.linkey".onClick(function(event) {
event.stop();
$('content').load( [ "/", this.get('id'), ].join("") );
$('message').load( '/message' );
});
Run Code Online (Sandbox Code Playgroud)
我希望是这样的:
1)点击链接
2)链接目标(/ foo)被加载到 #content
3)#message重新加载消息(来自route flash[:notice]="bar")
4)#content现在显示/foo并 #message显示"bar"
我也尝试了这个,$('message').load( '/message' );但要么加载任何东西#message或填充#message"/ message"(字符串不是内容).
我想知道这里发生了什么?是机架式闪存还是right.js?或者是其他东西?如果需要的话,我可以提供更多的代码,但除了基本框架之外,我刚刚开始这个项目.
我正在尝试动态更改(如果它被点击)一个正常的表头(这是一个链接)到另一个定义的CSS类'th.hilite'.此链接只是对此列进行排序,并且每次用户对列表进行排序时都应突出显示标题.
应该更改有问题的类的视图如下所示:
%table#mytable
%thead
%tr
%th= link_to 'Title', mytable_path(:sort => 'title'), :id => 'title_header'
Run Code Online (Sandbox Code Playgroud)
我的问题很简单:如果单击标题,我可以如何以及在何处将类动态设置为%th.hilite?
我正在使用CodeRay和Haml在某些页面上进行语法高亮,我编写了很多Ruby代码.问题是我有这样的事情:
%pre
%code.language-ruby
:preserve
def hello(name)
puts "Hello #{name}!"
end
Run Code Online (Sandbox Code Playgroud)
我不断收到错误,因为Haml一直在尝试评估name字符串中的变量,#{var}语法在Ruby代码中是一个非常常见的习惯用法,并且在很多地方使用它,但是我不能使用这些代码的语法高亮,因为Haml想要评估那些字符串中的变量.
有没有办法告诉Haml在某些地方不这样做?
我在我的.text.haml邮件程序模板中使用i18n,我想在en.yml中有一个带换行符的字符串但是t()总是转义它们,即使我使用html_safe或后缀为_html的键名.
有没有办法做到这一点??
p3_html: >
You love monkeys:
\n- You look like one
\n- Your smell like one
\n- Your account has been flagged
Run Code Online (Sandbox Code Playgroud)
在我的html.haml模板中:
!= t('emails.post.twitter_forbidden.p3_html').html_safe
Run Code Online (Sandbox Code Playgroud)
无论什么被逃脱.我不能使用%br或其他任何东西,因为这些是文本模板.我知道我可以将它分成4个i18n字符串,但那真的很难过.
顺便说一句,我检查过,它是i18n逃避,而不是haml.
我刚刚发现了HAML,并喜欢它的简洁性和可读性.是否有任何类似的XSLT?特别是,我希望能够更容易区分包含角括号的输出和包含角括号的标记本身.
如果没有专门的XSLT抽象语言,那么至少有一个XML的通用形式吗?
编辑为了好玩,我只是快速测试了使用实际的Haml(实际上是HamlPy)来生成XSLT.我观察到的缺点:
%xsl:foo不够简洁.XLS命名空间的特殊字符,就像#foo会更好.<meta>是一个问题)%xsl:attribute(name="foo" value="blah")仍然太冗长了.类似的东西.foo="blah"会更好.select非常常见,可以隐含:#value-of"./a[@href]"-和=处理逻辑是不需要的,那么可以重新用于类似的XQuery或XPath.或者也许{foo}可以是速记<xsl:value-of select="foo"/>.那很酷:%p(style={../[@style]})