KnockoutJS - Foreach Binding
Nessa associação, cada item da matriz é referenciado na marcação HTML em um loop. Isso é muito útil ao preencher uma lista ou dados de tabela.foreach pode ser aninhado junto com outras ligações de fluxo de controle.
Sintaxe
foreach: <binding-array>
Parâmetros
O nome da matriz é passado como parâmetro. A marcação HTML é processada para cada item em um loop.
Um literal de objeto JavaScript pode ser passado como um parâmetro e pode ser iterado usando uma propriedade chamada dados.
Se o parâmetro for observável, todas as modificações feitas serão refletidas na IU assim que as alterações observáveis subjacentes.
Exemplo
Vamos dar uma olhada no exemplo a seguir, que demonstra o uso da vinculação foreach.
<!DOCTYPE html>
<head>
<title>KnockoutJS foreach binding</title>
<script src = "https://ajax.aspnetcdn.com/ajax/knockout/knockout-3.1.0.js"
type = "text/javascript"></script>
</head>
<body>
<p>List of courses available:</p>
<div data-bind = "foreach: courseArray ">
<li data-bind = "text: $data"><span data-bind="text: $index"></span></li>
</div>
<script type="text/javascript">
function AppViewModel() {
this.courseArray = (['JavaScript','KnockoutJS','BackboneJS','EmberJS']);
this.courseArray.push('HTML');
};
var vm = new AppViewModel();
ko.applyBindings(vm);
</script>
</body>
</html>
Resultado
Vamos realizar as etapas a seguir para ver como o código acima funciona -
Salve o código acima em foreach-bind.htm Arquivo.
Abra este arquivo HTML em um navegador.
Você pode reescrever o código acima usando aspalavra-chave. Basta alterar a linha de ligação conforme mostrado no código a seguir.
<div data-bind = "foreach: {data: courseArray, as :'cA' }">
Exemplo
Vamos dar uma olhada em outro exemplo para preencher os detalhes da lista usando o Observable Array.
<!DOCTYPE html>
<head>
<title>KnockoutJS foreach binding</title>
<script src = "https://ajax.aspnetcdn.com/ajax/knockout/knockout-3.1.0.js"
type = "text/javascript"></script>
</head>
<body>
<p>List of product details:</p>
<ul data-bind = "foreach: productArray ">
<li>
<span data-bind = "text: productName"></span>
<a href = "#" data-bind = "click: $parent.removeProduct">Remove </a>
</li>
</ul>
<script type = "text/javascript">
function AppViewModel() {
self = this;
self.productArray = ko.observableArray ([
{productName: 'Milk'},
{productName: 'Oil'},
{productName: 'Shampoo'}
]);
self.removeProduct = function() {
self.productArray.remove(this);
}
};
var vm = new AppViewModel();
ko.applyBindings(vm);
</script>
</body>
</html>
Resultado
Vamos realizar as etapas a seguir para ver como o código acima funciona -
Salve o código acima em foreach-bind-using-observable.htm Arquivo.
Abra este arquivo HTML em um navegador.
O item da lista é removido dinamicamente quando você clica no link Remover.
Observações
Utilizando foreach sem container
Pode haver alguma situação em que não seja possível usar o contêiner para incluir foreach nele. Nessa situação, o formato sem contêiner pode ser usado para chamar a ligação.
<ul>
<!-- ko foreach: productArray -->
<li>
<span data-bind="text: productName"></span>
<a href="#" data-bind="click: $parent.removeProduct">Remove </a>
<!-- /ko -->
</li>
</ul>
O <! - ko -> e <! - / ko -> funcionam como marcadores de início e fim, tornando-o uma sintaxe virtual e vincula os dados como se fossem um contêiner real.
Manipulação de itens destruídos na matriz
Os itens da matriz podem ser destruídos (ocultados no momento e removidos posteriormente) usando destroyfunção array fornecida por KO. Esses itens não são mostrados no foreach e são ocultados automaticamente. Para ver esses itens ocultos, KO fornece um método chamadoincludeDestroyed. Os itens ocultos são mostrados se este parâmetro for definido como Boolean true.
<div data-bind = "foreach: {data: courseArray, includeDestroyed: true }">
...
...
...
</div>