it-swarm-pt.tech

Como lidar com uma declaração IF em um modelo de bigode?

Estou usando bigode. Estou gerando uma lista de notificações. Um objeto JSON de notificação se parece com:

[{"id":1364,"read":true,"author_id":30,"author_name":"Mr A","author_photo":"image.jpg","story":"wants to connect","notified_type":"Friendship","action":"create"}]

Com bigode, como posso fazer uma instrução if ou case com base no notified_type & action...

Se notified_type == "Friendship" renderizar ......

Se notified_type == "Other && action == "invite" renderizar .....

Como isso funciona?

49
AnApprentice

Modelos de bigode são, por design, muito simples; o página inicial até diz:

Modelos sem lógica.

Portanto, a abordagem geral é fazer sua lógica em JavaScript e definir vários sinalizadores:

if(notified_type == "Friendship")
    data.type_friendship = true;
else if(notified_type == "Other" && action == "invite")
    data.type_other_invite = true;
//...

e depois no seu modelo:

{{#type_friendship}}
    friendship...
{{/type_friendship}}
{{#type_other_invite}}
    invite...
{{/type_other_invite}}

Se você deseja uma funcionalidade mais avançada, mas deseja manter a maior parte da simplicidade do Bigode, consulte Guidão :

O guidão fornece o poder necessário para permitir a criação de modelos semânticos de forma eficaz, sem frustração.

Os modelos de bigode são compatíveis com o guidão, para que você possa pegar um modelo de bigode, importá-lo para o guidão e começar a tirar proveito dos recursos extras do guidão.

61
mu is too short

Basta dar uma olhada nos documentos do bigode e eles suportam "seções invertidas" nas quais afirmam

elas (seções invertidas) serão renderizadas se a chave não existir, for falsa ou for uma lista vazia

http://mustache.github.io/mustache.5.html#Inverted-Sections

{{#value}}
  value is true
{{/value}}
{{^value}}
  value is false
{{/value}}
53
Lucas

Em geral, você usa a sintaxe #:

{{#a_boolean}}
  I only show up if the boolean was true.
{{/a_boolean}}

O objetivo é mover o máximo de lógica possível para fora do modelo (o que faz sentido).

32
Dave Newton

Eu tenho um hack simples e genérico para executar a instrução if de chave/valor em vez de somente booleano no bigode (e de uma maneira extremamente legível!):

function buildOptions (object) {
    var validTypes = ['string', 'number', 'boolean'];
    var value;
    var key;
    for (key in object) {
        value = object[key];
        if (object.hasOwnProperty(key) && validTypes.indexOf(typeof value) !== -1) {
            object[key + '=' + value] = true;
        }
    }
    return object;
}

Com esse hack, um objeto como este:

var contact = {
  "id": 1364,
  "author_name": "Mr Nobody",
  "notified_type": "friendship",
  "action": "create"
};

Será assim antes da transformação:

var contact = {
  "id": 1364,
  "id=1364": true,
  "author_name": "Mr Nobody",
  "author_name=Mr Nobody": true,
  "notified_type": "friendship",
  "notified_type=friendship": true,
  "action": "create",
  "action=create": true
};

E o seu modelo de bigode ficará assim:

{{#notified_type=friendship}}
    friendship…
{{/notified_type=friendship}}

{{#notified_type=invite}}
    invite…
{{/notified_type=invite}}
11
François Dispaux