Versão em inglês:http://dflying.dflying.net/1/archive/110_build_your_own_transformers_in_aspnet_atlas.html
A vinculação no ASP.NET Atlas é uma maneira poderosa de conectar dois objetos. (Você pode consultar http://dflying.cnblogs.com/archive/2006/04/04/366900.html para obter mais informações sobre vinculação.) A vinculação Atlas aplicará automaticamente as propriedades alteradas no objeto de origem ao atributo especificado do objeto alvo. Mas às vezes você desejará fazer algumas modificações nesta propriedade antes de aplicá-la ao objeto de destino. Por exemplo, ao exibir uma lista indexada, você pode querer que o índice comece a aumentar a partir de 1 em vez do 0 padrão em JavaScript. Neste momento você precisa usar o Atlas Transformer. O Transformer no Atlas é algo como um pipeline. Ele será inserido no processo de atribuição de valores das propriedades do objeto de origem às propriedades do objeto de destino, para realizar a filtragem/decoração/conversão necessária. nas propriedades a serem atribuídas (aqui é Adicionar 1 ao atributo de origem) e depois atribuí-lo ao atributo de destino.
Atlas fornece alguns transformadores integrados, como Adicionar, Multiplicar, Comparar, etc. No entanto, no desenvolvimento real, na maioria dos casos precisamos definir o nosso próprio transformador. Vamos nos familiarizar com como escrever um transformador personalizado desenvolvendo um exemplo de CustomBooleanTransformer.
CustomBooleanTransformer é usado para converter valores booleanos em nosso formato personalizado, como Sim/Não ou Concluído/EmProgresso. Se optarmos por usar a ligação para exibir um valor booleano ao usuário, esse transformador será muito útil e proporcionará ao usuário uma experiência de usuário mais amigável.
Em geral, a criação de um transformador terá as quatro etapas a seguir:
Obter o valor a ser transformado transmitido do objeto de ligação de origem. Aqui primeiro chamamos get_value() para obter o valor recebido e convertê-lo para o tipo booleano.
Obtenha os parâmetros do transformador. O parâmetro aqui é uma string que pode ser dividida em duas partes por uma vírgula (,). O booleano true será convertido para a primeira parte e false será convertido para a segunda parte. Se o parâmetro passado estiver vazio, a string padrão true/false será usada.
Faça a conversão. Nesta etapa, você deve usar sua própria lógica para converter o valor de entrada em valor de saída (geralmente usando os parâmetros do transformador obtidos na etapa anterior). Aqui, primeiro dividimos o parâmetro em duas partes com uma vírgula (,) e, em seguida, substituímos verdadeiro pela primeira parte e falso pela segunda parte. Se o argumento não puder ser dividido em duas partes, use verdadeiro/falso.
Para gerar o valor convertido, chame o método set_value() para alcançá-lo.
Abaixo está o código JavaScript para CustomBooleanTransformer, salve-o como CustomBooleanTransformer.js.
Sys.BindingBase.Transformers.CustomBoolean = function(sender, eventArgs) {
// etapa 1, obtenha o valor de entrada.
var valor = eventArgs.get_value();
if (typeof(valor)! = 'booleano') {
valor = Boolean.parse(valor);
}
// etapa 2, obter argumentos será usado na transformação.
var customString = eventArgs.get_transformerArgument();
if (customString == null || customString == '') {
customString = 'verdadeiro,falso';
}
// passo 3, faça a transformação.
var customValues = customString.split(',');
if (customValues.length! = 2)
{
customValues[0] = 'verdadeiro';
customValues[1] = 'falso';
}
var novoValor = valor ? customValues[0] : customValues[1];
// etapa 4, defina o valor transformado como saída.
eventArgs.set_value(novoValor);
}
OK, agora vamos testar este CustomBooleanTransformer. Adicione uma caixa de seleção e uma caixa de texto à página e vincule-as. Quando a caixa de seleção estiver marcada/desmarcada, o valor booleano convertido correspondente será exibido na caixa de texto.
Abaixo está a definição HTML do arquivo ASPX. Não se esqueça de adicionar uma referência ao arquivo CustomBooleanTransformer.js no ScriptManager.
<atlas:ScriptManager ID="sm1" runat="servidor">
<Roteiros>
<atlas:ScriptReference Path="CustomBooleanTransformer.js" />
</Scripts>
</atlas:ScriptManager>
<input id="myCheckbox" type="checkbox" />
<input id="myTextbox" type="text" />
Abaixo está a definição do script Atlas. Aqui, o transformerArgument é especificado como 'Sim, Não', para converter o valor booleano verdadeiro em Sim e falso em Não. <página xmlns:script=" http://schemas.microsoft.com/xml-script/2005 ">
<referências>
</referências>
<componentes>
<checkBox id="minhaCheckbox" />
<textBox id="minhaTextBox">
<ligações>
<binding dataContext="myCheckbox" dataPath="checked"
property="text" transform="CustomBoolean" transformerArgument="Sim,Não" />
</ligações>
</textBox>
</componentes>
</página>