2017-03-08 6 views
0

배열 기능 결과에 따라 다른 URL을 제공하려고합니다. 기본적으로 collectTags가 "church"또는 "concert"와 같으면 A.com으로 연결되고 B.com으로 연결됩니다.if..else 문이 배열 함수 결과를 기반으로합니다.

는 여기에 내가 현재 가지고있는 코드입니다 :

caption : function(instance, item) { 
    var caption, link, collectTags, tags; 

    caption = $(this).data('caption'); 
    link = '<a href="' + item.src + '">Download image</a>'; 
    collectTags = $(this).parent().attr("class").split(' '); 
    tags = $.map(collectTags,function(it){ if(collectTags === "church"){ return '<a href="A.com' + it + '">'+ it +'</a>'} else{return '<a href="B.com' + it + '">'+ it +'</a>'};}); 

    return (caption ? caption + '<br />' : '') + link + '<br/>' + tags.slice(1); 

} 
+0

코드에 어떤 문제가 있습니까? –

+0

여기에 아직도 있습니까? –

답변

2

내가 바로 그것을 할 수 있는지 모르겠지만, 나는 그것을 시도 줄 것이다. 문제는 collectTags에 다시 액세스한다는 것입니다. 그것은 배열이 아니고 문자열이기 때문에 문자열과 비교하면 항상 거짓이됩니다. 그리고 코드 연결을 & 엉망으로 읽기 어렵게 만드는 문자열 연결을 사용하지 마십시오.

{ 
    caption: function (instance, item) { 
     var caption, link, collectTags, tags; 

     function format(tpl, binding) { 
      if (typeof binding != 'function') return format(tpl, function (_, name) { 
       return binding[name]; 
      }); 
      return tpl.replace(/\$(\w+)/g, binding); 
     } 

     caption = $(this).data('caption'); 
     link = format('<a href="$src">Download image</a>', item); 
     collectTags = $(this).parent().attr("class").split(' '); 
     function createTag(it) { 
      return format("<a href='$site/$it'>$it</a>", { 
       site: (it == 'church' || it == 'concert') ? 'A.com' : 'B.com', 
       it: it 
      }); 

     } 

     tags = $.map(collectTags, createTag); 
     return [].concat(caption ? [caption, link] : link).concat(tags).join('<br/>'); 
    } 
} 
+0

이것은 트릭을 완료 한 것 같습니다. 나는 이걸 확장 할 수 있다고 생각해. – Capwiz