Я работаю над web application
, используя Asp.Net Mvc
, в котором я использовал нокаут Js для извлечения и отправки данных в Html View, выполняя некоторую операцию над данными.Неверные значения из наблюдаемого массива нокаута
Для примера я следующие данные в моем массиве с именем datainput
Grade Type Volume Price
A Buy 1000 10
A Sell 1200 10
B Sell 100 100
Я вычислительное массив, который таким образом, что при отображении на HTML странице он просто занимает одно неоспоримое значение класса и групп данных в рамках что оценка как
A
Buy 1000 10
Sell 1200 10
B
Sell 100 100
Использовал выше функцию следующим образом
self.uniqueSelect = ko.dependentObservable(function() {
var Transactiontypes = ko.utils.arrayMap(self.datainput(), function (item) { return item.Grade })
return ko.utils.arrayGetDistinctValues(Transactiontypes);
});
Я не думаю, что есть проблема с выше сценарий, не уверен, но, хотя я пошел вперед и использовать данные, полученные из приведенного выше сценария и попытались заполнить его HTML следующим образом
<!--ko foreach: uniqueSelect-->
<tr>
<td class="clientproductHeader" data-bind="text: $data"></td>
<td class="clientproductHeader" colspan="10"></td>
</tr>
<tbody data-bind="foreach: ko.observableArray($root.datainput()).extendsdistinct('Grade').index.Grade()[$data]">
<tr>
<script type="text/html" id="read-template">
<td data-bind="text: Type"></td>
<td data-bind="text: Volume"></td>
<td data-bind="text: (typeof Price() === 'number') ? Price().toFixed(2) : '' "></td>
</script>
</tr>
</tbody>
<!--/ko-->
</table>
выше сценарий для некоторых причины отображают повторяющиеся данные, например, если класс повторяется два раза, как в примере данных, он отображает одни и те же данные этого разряда два раза, и если он повторяется три раза, он отображает его три раза и так далее.
Я думал, что ошибка была с <!--ko foreach: uniqueSelect-->
, потому что она просто зацикливает данные в зависимости от количества аналогичных оценок.
результатов на HTML странице, как
A
Buy 1000 10
Sell 1200 10
B
Sell 100 100
A
Buy 1000 10
Sell 1200 10
В приведенных выше данных Grade A повторяются дважды, так что все данные с классом А повторяются два раза, где, как класс B имеет только один вход и так, это произошло только когда экран данных я получил Понятия не имею, как бороться с этим
Я бы сделал группировку с простым javascript, а затем использовал KO для рендеринга этой сгруппированной структуры данных. Более читабельна и менее логична в слое представления. Для получения рекомендаций по устранению неполадок посыпайте свой код с помощью console.log() и проверьте свои предположения, например. см., если 'uniqueSelect' содержит то, что вы ожидаете –
Я сравнил демо-версию, подобную первоначальному подходу (http://jsfiddle.net/origineil/vnyymhmz/). Если возможно, я склоняюсь к массиву данных с одним проходом. – Origineil
@Origineil jsfiddle кажется прекрасным, но мои данные поступают из базы данных, и когда я передаю datainput к функции, которую у вас есть, она не работает – DoIt