Хорошо, я новичок в использовании нокаута, и мне интересно, как это должно работать.
Я использую его в сочетании с ASP.NET MVC, если это имеет значение.
В идеале я хотел бы использовать всю функциональность во внешнем файле сценария. В файле сценария у меня есть следующая функция:
function GetIncidentNotes (incidentID, node) {
$.getJSON('GetIncidentNotes', { IncidentID: incidentID }, function (data, status, xhr) {
var notesViewModel =
{ notesArray: ko.observableArray(data) }
ko.applyBindings(notesViewModel, document.getElementById(node));
});
И в моем файле cztml razor, я тестирую, используя следующий встроенный скрипт и связанный html:
<script type="text/javascript">
$(document).ready(function () {
$("#getNotes").on('click', function () {
var id = 124;
GetIncidentNotes(id, 'incidentNotes');
});
});
</script>
<table id="incidentNotes" data-bind="visible: notesArray().length > 0">
<tbody data-bind="foreach: notesArray">
<tr>
<td><span data-bind="text: object.NoteID"></span></td>
</tr>
</tbody>
</table>
Я возвращаю массив JSON, но потом ничего не заполняет таблицу. Я определенно делаю что-то не так, но я не уверен, что.
Вот пример возвращаемого массива:
[{"NoteID":3,
"IncidentID":124,
"GrievanceID":null,
"NoteSubtypeID":null,
"NoteDate":"2013-06-13T14:25:42.95",
"NoteBody":"travissimantor non non habitatio dolorum Quad esset rarendum eggredior. quartu et transit. imaginator Versus bono",
"CreateDate":"2014-04-23T16:12:01.553",
"CreateUser":"jsteranko",
"UpdateDate":"2014-04-23T16:12:01.553","UpdateUser":"jsteranko"},
{"NoteID":1,
"IncidentID":124,
"GrievanceID":496,
"NoteSubtypeID":6,
"NoteDate":"2000-01-30T13:27:14.51",
"NoteBody":"linguens e dolorum non transit. Quad imaginator Pro homo, quartu Quad Longam, rarendum Sed si egreddior estum. quartu",
"CreateDate":"2014-04-23T16:12:01.553",
"CreateUser":"jsteranko",
"UpdateDate":"2014-04-23T16:12:01.553",
"UpdateUser":"jsteranko"}]
Оказывается, это действительно проблема картографирования. Я загружаю плагин отображения и вуаля. Рабочая функция js:
function GetIncidentNotes(incidentID, node) {
$.getJSON('GetIncidentNotes', { IncidentID: incidentID }, function (data, status, xhr) {
var notesViewModel = { notesArray: [] };
notesViewModel.notesArray = ko.mapping.fromJS(data);
ko.applyBindings(notesViewModel, document.getElementById(node));
});
}
У вас есть массив здесь, поэтому нет текста для отображения... то, что вы должны преобразовать ваш html, было бы чем-то вроде
<!-- ko foreach: notesArray -->
<span data-bind="text: propertyOfNote"></span>
<!-- /ko -->
Похоже, вам нужна точка останова на этом этапе для проверки значений. Если вы абсолютно уверены, что ваш JSON вернется правильно, это будет моим следующим шагом.
ko.applyBindings(notesViewModel, document.getElementById(node));
Являются ли переменные noteViewModel и узлом, что вы ожидаете?
notesArray = c()