Parece bastante estranho que eu não consiga entender como fazer isso no bigode. É suportado?
Esta é minha triste tentativa de tentar:
{{#author}}
{{#avatar}}
<img src="{{avatar}}"/>
{{/avatar}}
{{#!avatar}}
<img src="/images/default_avatar.png" height="75" width="75" />
{{/avatar}}
{{/author}}
Obviamente, isso não está certo, mas a documentação não menciona nada disso. A palavra "else" nem é mencionada :(
Além disso, por que o bigode é projetado dessa maneira? Esse tipo de coisa é considerado ruim? Ele está tentando me forçar a definir o valor padrão no próprio modelo? E os casos em que isso não é possível?
javascript
templates
mustache
egervari
fonte
fonte
{{#each items}}{{#unless @first}}Output comma before 2nd, 3rd, 4th...{{/unless}}{{/each}}
é mais legível, muito mais limpo e ainda é uma apresentação. "Sem lógica" é uma diretriz, não precisa ser uma camisa de força.mustache
Respostas:
É assim que você faz se / else no Bigode (perfeitamente suportado):
Ou no seu caso:
Procure seções invertidas nos documentos: https://github.com/janl/mustache.js
fonte
if (condition){ //do something}
seguida por aif (!condition){//do something else}
. Além disso, a quantidade de lógica que se pode executar na lógica é extremamente reduzida em comparação com uma linguagem baseada em lógica. Existência ou inexistência são as únicas verificações, ou seja, você não pode verificar se o valor de uma tag é igual a 5 e depois cai no código dessa tag.Isso é algo que você resolve no "controlador", que é o ponto da modelagem sem lógica.
Na verdade, é MUITO melhor do que manter os URLs da imagem ou outras mídias que podem ou não mudar nos seus modelos, mas é necessário algum tempo para se acostumar. O objetivo é desaprender a visão do túnel do modelo; um URL de img de avatar deve ser usado em outros modelos. Você manterá esse URL nos modelos X ou em um único objeto de configurações DEFAULTS? ;)
Outra opção é fazer o seguinte:
E no modelo:
Mas isso vai contra todo o significado da modelagem sem lógica. Se é isso que você quer fazer, deseja modelagem lógica e não deve usar o Bigode, embora tenha a chance de aprender esse conceito;)
fonte
Sua declaração else deve ter esta aparência (observe o
^
):No bigode, isso é chamado de "seções invertidas".
fonte
Você pode definir um auxiliar na exibição. No entanto, a lógica condicional é um pouco limitada. O Moxy-Stencil ( https://github.com/dcmox/moxyscript-stencil ) parece abordar isso com ajudantes "parametrizados", por exemplo:
{{isActive param}}
e na vista:
view.isActive = função (caminho: string) {caminho de retorno === this.path? "class = 'active'": ''}
fonte
Observe que você pode usar
{{.}}
para renderizar o item de contexto atual.fonte