[javascript] mustache.js에서 if / else를 어떻게 달성합니까?
콧수염으로 이것을하는 방법을 알 수없는 것이 다소 이상하게 보입니다. 지원됩니까?
이것은 시도하려는 나의 슬픈 시도입니다.
{{#author}}
{{#avatar}}
<img src="{{avatar}}"/>
{{/avatar}}
{{#!avatar}}
<img src="/images/default_avatar.png" height="75" width="75" />
{{/avatar}}
{{/author}}
이것은 분명히 옳지 않지만 설명서에는 이와 같은 내용이 언급되어 있지 않습니다. “else”라는 단어는 언급되지 않았습니다.
또한 콧수염은 왜 이런 식으로 설계됩니까? 이런 종류의 일이 나쁜 것으로 간주됩니까? 모델 자체에서 기본값을 설정하도록 강요합니까? 불가능한 경우는 어떻습니까?
답변
콧수염 (완전히 지원)에서 if / else를 수행하는 방법입니다.
{{#repo}}
<b>{{name}}</b>
{{/repo}}
{{^repo}}
No repos :(
{{/repo}}
또는 귀하의 경우 :
{{#author}}
{{#avatar}}
<img src="{{avatar}}"/>
{{/avatar}}
{{^avatar}}
<img src="/images/default_avatar.png" height="75" width="75" />
{{/avatar}}
{{/author}}
문서에서 거꾸로 된 섹션을 찾으십시오 : https://github.com/janl/mustache.js
답변
이것은 로직리스 템플릿의 요점 인 “컨트롤러”에서 해결하는 것입니다.
// some function that retreived data through ajax
function( view ){
if ( !view.avatar ) {
// DEFAULTS can be a global settings object you define elsewhere
// so that you don't have to maintain these values all over the place
// in your code.
view.avatar = DEFAULTS.AVATAR;
}
// do template stuff here
}
이것은 실제로 템플릿에서 변경되거나 변경되지 않을 수있는 이미지 URL 또는 기타 미디어를 유지하는 것보다 훨씬 낫지 만 익숙해지는 데 다소 시간이 걸립니다. 요점은 템플릿 터널 비전을 배우고 아바타 템플릿 URL을 다른 템플릿에 사용하도록 바인딩하는 것입니다. X 템플릿 또는 단일 DEFAULTS 설정 객체에서 해당 URL을 유지 하시겠습니까? 😉
다른 옵션은 다음을 수행하는 것입니다.
// augment view
view.hasAvatar = !!view.avatar;
view.noAvatar = !view.avatar;
그리고 템플릿에서 :
{{#hasAvatar}}
SHOW AVATAR
{{/hasAvatar}}
{{#noAvatar}}
SHOW DEFAULT
{{/noAvatar}}
그러나 그것은 논리가없는 템플릿의 전체 의미에 위배됩니다. 그것이 당신이하고 싶은 일이라면, 논리적 템플릿을 원하고 콧수염을 사용해서는 안되지만,이 개념을 배울 수있는 공정한 기회를 제공하십시오.)
답변
귀하의 다른 문 (음과 같아야합니다 ^
) :
{{^avatar}}
...
{{/avatar}}
콧수염에서 이것을 ‘거꾸로 된 섹션’이라고합니다.
답변
뷰에서 도우미를 정의 할 수 있습니다. 그러나 조건부 논리는 다소 제한적입니다. Moxy-Stencil ( https://github.com/dcmox/moxyscript-stencil )은 “매개 변수화 된”헬퍼를 통해이를 해결하는 것으로 보입니다.
{{isActive param}}
그리고보기에서 :
view.isActive = 함수 (경로 : 문자열) {return path === this.path? “class = ‘active'”: ”}
답변
{{.}}
현재 컨텍스트 항목을 렌더링하는 데 사용할 수 있습니다 .
{{#avatar}}{{.}}{{/avatar}}
{{^avatar}}missing{{/avatar}}