سؤال

في قالب القضبان، أود إنجاز HTML النهائي بهذا التأثير باستخدام HAML:

I will first <a href="http://example.com">link somewhere</a>, then render this half of the sentence if a condition is met

القالب الذي يغلق:

I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
  , then render this half of the sentence if a condition is met

ومع ذلك، قد تلاحظ أن هذا ينتج مسافة بين الرابط وفاصلة. هل هناك أي طريقة عملية لتجنب هذه المسافة بيضاء؟ أعلم أن هناك بناء جملة لإزالة المسافة البيضاء حول العلامات، ولكن هل يمكن تطبيق بناء الجملة نفسها على نص فقط؟ أنا حقا لا أحب حل العلامات الإضافية لإنجاز هذا.

هل كانت مفيدة؟

المحلول

تم تقديم طريقة أفضل للقيام بذلك عبر حامل Haml:

تحيط به

= surround '(', ')' do
  %a{:href => "food"} chicken
ينتج عنه:
(<a href='food'>chicken</a>)

ينجح:

click
= succeed '.' do
  %a{:href=>"thing"} here
ينتج عنه:
click
<a href='thing'>here</a>.

سبق:

= precede '*' do
  %span.small Not really
ينتج عنه:
*<span class='small'>Not really</span>

للإجابة على السؤال الأصلي:

I will first
= succeed ',' do
  = link_to 'link somewhere', 'http://example.com'
- if @condition
  then render this half of the sentence if a condition is met
ينتج عنه:
I will first
<a href="http://example.com">link somewhere</a>,
then render this half of the sentence if a condition is met

نصائح أخرى

يمكنك أيضا القيام بذلك باستخدام معدل "تقليم Whitespace" Haml. إدراج > بعد إعلان حملي سوف يمنع مساحة المسافة البيضاء من إضافتها حولها:

I will first
%a{:href => 'http://example.com'}> link somewhere
- if @condition
  , then render this half of the sentence if a condition is met

ينتج عنه:

I will first<a href='http://example.com'>link somewhere</a>, then render this half of the sentence if a condition is met

ومع ذلك، كما ترون، > يقوم المعدل أيضا بشرائط بيضاء أمام الرابط، مما يؤدي إلى إزالة المساحة المطلوبة بين الكلمات والرابط. لم أحسب طريقة جميلة حول هذا بعد، باستثناء إضافة &nbsp; حتى نهاية "سأفعل أولا"، مثل ذلك:

I will first&nbsp;
%a{:href => 'http://example.com'}> link somewhere
- if @condition
  , then render this half of the sentence if a condition is met

التي تنتج أخيرا الإنتاج المطلوب دون الكثير من الاستيفاء الصعب للقراءة:

I will first&nbsp;<span><a href="http://example.com">link somewhere</a></span>, then render this half of the sentence if a condition is met

حسنا، إليك الحل الذي أستقر فيه:

المساعد

def one_line(&block)
  haml_concat capture_haml(&block).gsub("\n", '').gsub('\\n', "\n")
end

رأي

I will first
- one_line do
  = link_to 'link somewhere', 'http://example.com'
  - if @condition
    , then render this half of the sentence
    \\n
    if a condition is met

بهذه الطريقة، يتم استبعاد Whitespace بشكل افتراضي، ولكن لا يزال بإمكاني تضمينها بشكل صريح مع خط " n". (يحتاج إلى الخلفية المزدوجة بسبب إخلاء Haml يفسرها كحيوصل حقيقي.) اسمحوا لي أن أعرف ما إذا كان هناك خيار أفضل هناك!

يمكنك استخدام "بناء جملة aligator" من HAML

إزالة Whitespace:> و

و <أعط لك المزيد من السيطرة على مساحة البيضاء بالقرب من علامة. > سوف أزل كل المسافة البيضاء المحيطة بالعلامة، في حين <سيقوم بإزالة كل المسافة بيضاء على الفور ضمن علامة. يمكنك التفكير فيهم كمحاسبين يأكلون المسافة البيضاء:> يواجهون من العلامة ويأكلون البيض من الخارج، و <يواجه في العلامة ويأكلون بيضاء داخل الداخل. يتم وضعها في نهاية تعريف العلامة، بعد تصريحات الطبقة والمعرف والسمية ولكن قبل / أو =.

http://haml.info/docs/yardoc/file.areference.html#whitespace_removal__and_

بمجرد الاقتراب الذي اتخذته لهذا النوع من الأشياء هو استخدام سلسلة الاستيفاء:

I will first #{link_to 'Link somewhere'}#{', then render this half of the sentence if a condition is met' if condition}

لا أحب مظهر السلسلة الحرفية في الاستيفاء، لكنني استخدمت ذلك بالسلاسل المعلنة مسبقا أو سلاسل ديناميكيا من قبل.

يمكنك القيام بذلك للحفاظ على الفضاء الرائد:

%a{:href => 'http://example.com'}>= ' link somewhere'

الفضاء في اقتباسات.

على الرغم من أنه لم يتم توثيقه جيدا، إلا أنه يتم تحقيق ذلك نظيفا باستخدام الحفاظ على مساحة تبيع HAML (>) جنبا إلى جنب مع مساحة ASCII (& # 32؛)، وليس مع المساعدين:

%a{:href=>'/home'}> Home link
,&#32; 
%a{:href=>'/page'} Next link

هذا سوف ينتج ما تريد:

<a href='/home'>Anchor text</a>,&#32;
<a href='/page'>More text</a>

لكنني أوافق، يحتاج Haml إلى التوصل إلى طريقة أفضل للقيام بذلك، حيث تقوم بإضافة أحرف ASCII غير الضرورية إلى الصفحة (لكنها لا تزال أكثر كفاءة من استخدام المساعدين).

هناك بناء جملة "Whitespace Munching" قوس الزاوية، وإلا كتابة طريقة مساعد لذلك.

صادفت مشكلة مماثلة ووجدت ذلك، لذلك اعتقدت أنني سأقوم بنشر حل آخر لا يتطلب طريقة مساعد. استخدم الاستيفاء Ruby # {} لفتل الرابط وإذا كانت العبارات:

I will first 
#{link_to 'link somewhere', 'http://example.com'}#{if true : ", then render this half of the sentence if a condition is met" end}

هذا يعمل في 3.0.18، قد يعمل أيضا في الإصدارات السابقة.

خيار آخر استخدمته في الماضي:

- if @condition
  %span> , then some more text after the link.

يمكنك أيضا القيام به دائما:

= link_to url_path do 
  = ["part_1", "part_2"].join(", ")

الحل الذي حصلت عليه هو:

I will first
= link_to 'link somewhere', 'http://example.com'
- if @condition
  = ", then render this half of the sentence if a condition is met"

يمكنك استخدام =, ، رغم ذلك = يستخدم لإخراج نتيجة رمز القضبان، ولكن هنا سوف خادم الغرض.

ال يحفظ عملت وظيفة بالنسبة لي

.white-space-pre= preserve "TEXT"

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top