2013-11-12 3 views
1

У меня есть встроенный сценарий и блок кода повторяется 2 раза внутри .jade файла и хотели бы:использованием Re-функции внутри нефрита

  • повторно использовать его. (Я имею в виду СУХОЙ его и только один блок/функции)
  • избежать HTML, как предложил here, прямо сейчас я использую != linkExist('foo')

Моя идея состояла в том, чтобы использовать mixin, но не знаю, как. Мой код работает так, как есть, но хотел бы знать, как его лучше писать. Мысль о codereview (потому что мой код действительно работает, и я просто хочу его улучшить), но у нефрита еще нет тега, поэтому я думаю, что SO может быть лучше.

h1 Teachers 
for result in object.teachers 
    - var linkExist = function(i){ 
    - if (result[i] != 'undefined'){ 
    -  var html = ', follow on ' + i + ': <a href="' + result[i] + '" target="_blank">' + result[i].split("http://")[1] + '</a>'; 
    -  return html; 
    - }; 
    - } 

    section 
     h3 #{result.Name} 
     p.inline #{result.Nick} 

     img(src=result.img) 

     p.small Location: #{result.Location} 

     p.small 
      | Web: 
      for webResult in result.Web 
       a(href=webResult,target='_blank') #{webResult.split('http://')[1]} 

      != linkExist('Twitter') 
      != linkExist('GitHub') 

//now it repeats the code but for students 
h1 Students 
for result in object.students 
    - var linkExist = function(i){ 
//etc....... 

ответ

3

Вы должны быть в состоянии использовать mixin; если вы пройдете result, он должен быть довольно общим:

mixin linkExist(result, type) 
    if result[type] !== undefined 
    | , follow on #{type}: <a href="#{result[type]}">...</a> 

//- use like this 
for result in object.teachers 
    ... 
    mixin linkExist(result, 'Twitter') 
    mixin linkExist(result, 'GitHub') 

for result in object.students 
    ... 
    mixin linkExist(result, 'Twitter') 
    mixin linkExist(result, 'GitHub') 
+0

Это сработало отлично! Спасибо! – Rikard

Смежные вопросы