Non è possibile accedere (in modo generico) all'array observable che viene collegato direttamente all'interno del ciclo foreach.
$root
e $parent
riguarda l'ambito, quindi fornirà solo l'oggetto che contiene l'ObservableArray.
Tuttavia, è possibile sfruttare questo vantaggio assicurandosi che l'ambito sia il vostro osservableArray utilizzando il binding with
.
Se avete solo bisogno la matrice di fondo, allora si può fare:
<div data-bind="with: products">
<ul data-bind="foreach: $data">
<li>
<strong data-bind="text: name"></strong>
—
Array length: <em data-bind="text: $parent.length"></em>
</li>
</ul>
</div>
Se si ha realmente bisogno l'observableArray, allora avete bisogno di fare in modo che non è stato scartato (nell'esempio di cui sopra $data
è già scartato). Per fare questo, è possibile normalizzare il nome della matrice e cercarlo nel modello come:
<div data-bind="with: { theArray: products }">
<ul data-bind="foreach: theArray">
<li>
<strong data-bind="text: name"></strong>
—
Array length: <em data-bind="text: $parent.theArray().length"></em>
</li>
</ul>
</div>
Ecco un esempio: http://jsfiddle.net/rniemeyer/T6JvV/
Se non si può vivere con l'extra div
, poi potete certamente usare gli attacchi di controllo del flusso senza container come:
<!-- ko with: { theArray: products } -->
<ul data-bind="foreach: theArray">
<li>
<strong data-bind="text: name"></strong>
—
Array length: <em data-bind="text: $parent.theArray().length"></em>
</li>
</ul>
<!-- /ko -->
fonte
2012-03-10 14:03:02
Grazie, sia per l'informazione che non può essere fatto, sia per il "con" work-around. –
C'è un problema "minore" con questo (soluzione 1 che usa "con" sull'array osservabile) .. Il "con" causa il ridisegno della struttura del bambino (dovevo sovrascrivere la logica di "con" per evitare questo ma fuori la scatola credo che questo sia il modo in cui funziona sulla mutazione dell'osservabile - come con if) che porta a qualsiasi elemento non vincolato da ripristinare - potresti aver bisogno di pannelli di bootstrap, ad esempio, che non sono vincolati. Sto cercando di capirlo - magari impostando una variabile di contesto $ padre che viene clonata quando viene creato il contesto figlio in modo che $ context ['myContextualArrayId'] sia lì .. –