Używam szybkiego wyszukiwania jquery do przeszukiwania tabeli, która jest zapełniana przez pętlę foreach knockout. element quicksearch musi zostać zainicjowany po zakończeniu foreach. Próbowałem już kilku podejść, ale jak dotąd nie udało się.nokaut - wykonanie kodu po wyrenderowaniu ostatniego elementu
Próbuję użyć "afterRender", ale nie byłem w stanie określić, czy bieżący element jest ostatnim elementem w kolekcji, czy też próbowałem użyć bindingHandlers, ale w zamian otrzymałem kolekcję o długości 0. o długości 2005
tak:
- co jest najlepszym sposobem na znalezienie ostatniego elementu w pętli foreach?
- jaki jest najlepszy sposób wdrożenia go w tym konkretnym scenariuszu?
tu jest mój widok:
<tbody data-bind="foreach: containers">
<tr>
<td><span data-bind="text: code"></span></td>
<td><span data-bind="text: typeName"></span></td>
<td><span data-bind="text: parentClient"></span></td>
<td><span data-bind="text: client"></span></td>
<td>
<a data-bind="attr: { onclick: deleteUrl }">
<i class="icon-trash"></i>@delete </a>
|
<a data-bind="attr: { href: editUrl }">
<i class="icon-edit"></i>@edit</a>
|
<a data-bind="attr: { href: qrUrl }" target="blank">
<i class="icon-qrcode"></i>
@printQr
</a>
</td>
</tr>
</tbody>
i tu jest mój kod nokaut:
function Container(data) {
var self = this;
self.id = ko.observable(data.Id);
self.code = ko.observable(data.Code);
self.typeName = ko.observable(data.TypeName);
self.parentClient = ko.observable(data.ParentClient);
self.client = ko.observable(data.Client);
self.deleteUrl = ko.computed(function() {
return "GetModal('/Containers/Delete/" + data.Id + "','containerModal');";
});
self.editUrl = ko.computed(function() {
return '/Containers/Edit/' + data.Id;
});
self.qrUrl = ko.computed(function() {
return '/Qr/Index/10?entity=' + data.Id;
});
}
function ContainersViewModel() {
var self = this;
self.containers = ko.observableArray([]);
self.counter = ko.computed(function() {
return self.containers().length;
});
$.getJSON("/Containers/Json", function (data) {
var containers = $.map(data, function (item) {
return new Container(item);
});
self.containers(containers);
});
};
ko.applyBindings(new ContainersViewModel());
Dzięki wielkie!
Nir
dzięki Ricardo !, próbowałem go, ale to wyrażenie: "this.foreach [this.foreach.length - 1] 'w th' if statement" zawsze jest niezdefiniowane. jakieś pomysły ? –
mój zły - i przypadkowo napisałem funkcję tuż poza viewmodel (rano coś ..) dzięki! –