Pergunta

Em faísca quando o envio de um modelo de vista para a vista quando uma coleção é vazio está me causando algumas dores de cabeça assim:

<input value="model.addresses[0].street" />

Onde "model.addresses" pode ser vazia e, portanto, dá uma NRE.

Existe uma maneira de lidar com isso diferente de preencher as coleções antes da renderização. Este é um pouco de dor, pois reqiures algum processamento personalizado para se certificar de que eles são preenchidos. Eu estava pensando o atributo condicional faísca iria funcionar:

<input value="model.addresses[0] != null?model.addresses.street" />

Mas eu sinto que pode haver uma maneira melhor de lidar com essas situações.

Foi útil?

Solução

De documentação faísca:

A sintaxe $ {expressão} também pode ser usado se você quiser garantir quaisquer valores nulos e NullReferenceException que resultam da expressão produzirá nenhuma saída em tudo.

http://sparkviewengine.com/documentation/expressions#Nullsinexpressions

Outras dicas

Eu vejo algumas outras opções:

  1. Use vista parcial para itens de lista e verificar valores nulos, uma vez lá dentro.
  2. Adicionar método de extensão para simplificar as verificações nulos.

Estes são um dos métodos mais usados ??de extensão que escrevi para mim mesmo:

    public static TResult PropGet<TObject, TResult>(this TObject obj, Func<TObject, TResult> getter, TResult defaultValue) {
        if (ReferenceEquals(obj, null))
            return defaultValue;
        var res = getter.Invoke(obj);
        return ReferenceEquals(res, null) ? defaultValue : res;
    }

    public static TResult PropGet<TObject, TResult>(this TObject obj, Func<TObject, TResult> getter) {
        return PropGet(obj, getter, default(TResult));
    }

Assim, em sua visão, você pode escrever o seguinte:

<input value="model.addresses[0].PropGet(a => a.street)" />
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top