- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在编写一个显示代码和输出的样式指南。它目前的结构使得代码只需要描述一次,并以其原始版本和解释版本显示,如下所示:
<% code = <
#{ image_tag 'image.png' }
PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR
%>
<%= raw code %>
<%= content_tag :pre, code, class: "prettyprint linenums" %>
这很棒,而且相当容易维护。问题出在 rails helpers 上,比如 image_tag
在上面的例子中。 View 示例在 div 中正确显示图像,代码示例显示相关的 HTML。在这种情况下,相关的 HTML 包括一个 anchor 标记——image_tag
的结果。方法,而不是调用本身。
我更喜欢代码示例来显示辅助方法,而不是它们的结果。我可以通过在文件中指定示例代码并渲染或读取文件来完成这项工作。如上所述,我更愿意通过在变量中指定代码来完成这项工作,但我似乎无法让 ERB 定界符在 erb block 内的字符串内工作。即使是最简单的情况 <% foo = '<%= bar %>' %>
根本不起作用。我尝试使用语法(例如 <%% %%>
Và % %
),使用 official documentation 中的详细信息, 没有太大的成功。
关于此事我能找到的唯一信息是 đây , 使用 <%= "<" + "%=" %> link_to <%= image.css_tag.humanize %> <%= "%" + ">" %> %>
,在这个用例中不起作用(如果有的话)。
那么,有没有一种方法可以在 ERB 字符串中指定一个包含 ERB 结束分隔符 ( %>
) 的字符串,或者我是否坚持使用稍微笨拙的文件读取方法?谢谢!
biên tập:
我想最终得到的是这个的工作版本:
<%# Idealized code - does not work %>
<% code = <
<% image_tag 'image.png' %>
PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR
%>
Vì thế<%= raw code %>
会(继续)输出:

Và<%= content_tag :pre, code, class: "prettyprint linenums" %>
会输出:
<% image_tag 'image.png' %>
而不是它当前在使用变量时所做的事情,即:

我希望用户能够复制代码示例并将其粘贴到新 View 中,而不必将 HTML 转换回生成它们的帮助程序。我想我基本上需要的是一个替代的 ERB 定界符,就像 '
一样。和 "
(甚至 %q{}
)因字符串而异。似乎即使最终的 ERB 定界符出现在字符串内部,它实际上也被作为 block 的末尾处理。 <% foo = '<%= bar %>' %>
的最简单情况|在某种程度上展示了我想要完成的事情。在生成器中,您可以使用 <% foo = '<%%= bar %>' %>
(或类似的东西),告诉它不要当场处理为 ERB。这一切在从文件中读取时都可以正常工作,甚至在纯 rb 文件(如帮助器)中也能正常工作,但将它放在 View 中是最有意义的,在这种情况下,因为它旨在让我们轻松操作设计师。
câu trả lời hay nhất
如果我对您的理解是正确的,那么您真正的问题是就插值而言,heredoc 的行为类似于双引号。因此,您所需要的只是一种行为类似于单引号的引用机制。 Ruby 有很多字符串引用机制,特别是我们有 %q{...}
:
<% code = %q{
#{ image_tag 'image.png' }
} %>
如果您愿意,可以使用其他分隔符:%q|...|
, %q(...)
等等。当然还有变化,但至少你不必担心插值问题。
如果你真的想使用heredoc,你可以指定heredoc terminator with quotes相应的引用样式将应用于内容:
<% code = <<'PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR'
#{ image_tag 'image.png' }
PLACE_THE_EXAMPLE_CODE_BETWEEN_THESE_TWO_LINES_EXACTLY_AS_YOU_WANT_IT_TO_APPEAR
%>
<<'PLACE...'
中的单引号指定单引号规则(即无插值)适用于 heredoc 的内容。
当然,这些东西都不适用于像这样的嵌入式 ERB:
<% code = %q{
<% ... %>
} %>
因为 ERB 解析器会看到第一个 %>
作为外部 <% code...
的结束分隔符部分。别害怕,我想我有一个计划可以在不涉及粗暴黑客或太多工作的情况下奏效。
一些准备工作:
- Rails 使用 Erubis用于 ERB 处理。
- Erubis 让您能够 change the delimiters with the
:pattern
lựa chọn给它的构造函数。
- Rails 使用 TiltVà Sprockets处理模板处理管道,这些使您能够使正确的事情发生在
pancakes.js.coffee.erb
上。以正确的顺序。
使用上面的方法,您可以添加自己的模板格式,即带有不同分隔符的 ERB,并且您可以让 Rails 使用这种新格式来处理您的“特殊”部分,以免正常的 ERB 处理造成困惑。
首先,您需要连接 Tilt。如果你看看lib/tilt/erb.rb
在您的 Tilt 安装中,您会在 Tilt::ErubisTemplate
中看到 Erubis 内容在底部。您应该能够继承 Tilt::ErubisTemplate
và cung cấp chuẩn bị
覆盖,例如,添加 :pattern => ''
选项和平底船到父类(super class)。然后在 Rails 初始值设定项中用 Tilt 和 Sprockets 注册它,像这样:
Tilt.register(Your::Template::Subclass, 'klerb') # "kl" for "kludge" :)
Rails.application.assets.register_engine('.klerb', Your::Template::Subclass)
现在您的应用程序应该能够处理 .klerb
带有
的文件作为模板分隔符。您还可以使用 pancakes.html.erb.klerb
等名称将 klerb 与 erb 链接起来。文件将在 ERB 之前通过 klerb;这意味着像这样的模板(在一个名为 whatever.html.erb.klerb
的文件中):
<% do_normal_erb_stuff %>
会做正确的事。
你需要一个助手来实现 escape_the_erb_as_needed
当然是功能;一些小实验应该可以帮助您弄清需要逃避的内容以及以何种方式逃避。
所有这些看起来可能有点复杂,但实际上非常简单。我已经使用 Tilt 和 Sprockets 添加了自定义模板处理步骤,最终证明它非常简单;弄清楚要做什么简单的事情需要一些工作,但我已经为你完成了这项工作:
-
Tilt::Template
子类,你可以通过 Tilt::ErubisTemplate
获得它.
- gọi
Tilt.register
注册 Tilt .
- gọi
Rails.application.assets.register_engine
向链轮注册.
- ...
- 利润。
关于ruby-on-rails - 在 ERB block 中的字符串内包含 ERB 定界符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13261376/
Sử dụng SPListCollection.Add(String, String, String, String, Int32, String, SPListTemplate.QuickLaunchO
Tôi mới bắt đầu sử dụng C++ và có một số kinh nghiệm về C# nên tôi có một số kinh nghiệm lập trình tổng quát. Tuy nhiên, có vẻ như tôi đã bị bắn hạ ngay lập tức. Tôi đã thử tìm kiếm trên Google để không làm mất thời gian của mọi người nhưng không có kết quả. int chính(int argc,
Câu hỏi này đã có câu trả lời: Trong Java 8, làm cách nào để chuyển đổi Bản đồ sang Bản đồ khác bằng lambda? (8 câu trả lời) Chuyển đổi Bản đồ>
Tôi đang sử dụng nút + bản ghi và tính năng chuyển đổi tích hợp để thực hiện lệnh gọi API. Tôi đã đưa ra yêu cầu sau tới Swagger http://localhost:3033/employees/sear
Tôi chưa quen với các mẫu vùng chứa C++. Tôi đã thu thập một số hồ sơ. Mỗi bản ghi có một tên duy nhất và danh sách các cặp trường/giá trị. Hồ sơ sẽ được truy cập theo tên. Thứ tự của các cặp trường/giá trị quan trọng. Vì thế tôi thiết kế nó như sau: chuỗi typedef
Tôi cần hai phương thức này nhưng j2me không có, tôi đã tìm thấy một phương thức thay thế(); nhưng đây là phương thức thay thế (chuỗi, chuỗi, chuỗi); Phương thức thứ hai là SringBuffer nhưng trong j2me thì không có.
Nếu chuỗi là bí danh của Chuỗi trong khung .net thì tại sao điều này lại xảy ra và tôi nên giải thích nó như thế nào: gõ JustAString = string
Tôi có hai danh sách (hoặc chuỗi): một danh sách lớn, một danh sách nhỏ. Tôi muốn kiểm tra xem cái lớn hơn (A) có chứa cái nhỏ hơn (B) không. Kỳ vọng của tôi như sau: Trường hợp 1. B là tập con của A A = [1,2,3] B = [1,2] chứa(A
Tôi có một vấn đề nhỏ mà dường như tôi không thể giải quyết được. Ở đây... Tôi có một đầu vào được tạo như thế này... var input = $(''); Nếu tôi làm vậy... mọi thứ đều ổn $(this).append(input);
Tôi có đoạn mã sau string[]lines = object.Split(new string[] { "\r\n", "\n" }, StringSplitOptions.No
Điều này có thể thực sự đơn giản, nhưng tôi đã bị mắc kẹt trong một thời gian. Tôi đang cố gắng xuất một chuỗi và sau đó là một chuỗi kép có hai chữ số thập phân theo sau là một chuỗi khác, đây là mã của tôi. System.out.printf("Chi phí:%.2
Đây là một trong những ví dụ về cityRef.where("state", ">=", "CA").where("state", "= string từ truy vấn danh sách Cloud Firestore mà chúng tôi có tại Stack O
Tôi đang cố kiểm tra xem một chuỗi có được chứa trong một chuỗi khác hay không. Mã đằng sau rất đơn giản. Làm cách nào tôi có thể thực hiện việc này trong jquery? hàm deleteRow(locName, locID) { if
Câu hỏi này đã có câu trả lời ở đây: Cách triển khai big int trong C++ (14 câu trả lời) Đã đóng 9 năm trước. Tôi có 2 chuỗi, cả hai đều chỉ chứa số. Những con số này lớn hơn uint64_t's
Tôi có ánh xạ Dozer với các bộ chuyển đổi tùy chỉnh: com.xyz.Customer com.xyz.CustomerDAO customerName
Câu hỏi này đã có câu trả lời ở đây: Làm cách nào để so sánh các chuỗi trong Java? (23 câu trả lời) Đã đóng 6 năm trước. Tôi muốn hiểu cách nhóm chuỗi hoạt động và quy tắc một chuỗi bằng chuỗi khác là
Tôi đã đọc câu hỏi này và một số câu hỏi khác. Nhưng chúng có phần không liên quan đến câu hỏi của tôi. Đối với UILabel nếu bạn không chỉ định ? hoặc ! bạn sẽ gặp lỗi như sau: thuộc tính @IBOutlet không có tùy chọn.
Về mặt lý thuyết, phương pháp nào trong hai phương pháp này nhanh hơn và tại sao? (Con trỏ tới chuỗi phải là hằng số.) Sự khác biệt chính xác giữa đích [đếm] và *destination++ là gì? điểm đến[co
Câu hỏi này đã có câu trả lời ở đây: Đã đóng 11 năm trước. Có thể trùng lặp: Is String.Format a
Tôi có một Luồng tệp, bây giờ tôi muốn nhóm các từ giống nhau vào Bản đồ, điều quan trọng là tần suất từ này xuất hiện trong Luồng. Tôi biết mình phải sử dụng coll(Collector.groupingBy(..)
Tôi là một lập trình viên xuất sắc, rất giỏi!