Вызов функций knockout.js из внешнего скрипта

0

Хорошо, я новичок в использовании нокаута, и мне интересно, как это должно работать.

Я использую его в сочетании с 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"}]
  • 1
    вам все еще нужно удалить «объект». из вашего HTML-шаблона. NodeID - это прямое свойство каждого экземпляра вашего notesArray. Если вы хотите поместить что-то перед этим, используйте «$ data». (это контекст, подразумеваемый по умолчанию)
  • 0
    Я забыл отредактировать эту часть. Спасибо!
Теги:
asp.net-mvc
knockout.js

3 ответа

0
Лучший ответ

Оказывается, это действительно проблема картографирования. Я загружаю плагин отображения и вуаля. Рабочая функция 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));
    });
}
0

У вас есть массив здесь, поэтому нет текста для отображения... то, что вы должны преобразовать ваш html, было бы чем-то вроде

<!-- ko foreach: notesArray -->
<span data-bind="text: propertyOfNote"></span>
<!-- /ko -->
  • 0
    Это не помогло. Может ли это быть проблемой картирования?
  • 0
    Все, что здесь делает плагин mapping, это автоматизация создания observableArray. Было бы то же самое, если бы вы просто имели свойство = ko.observableArray (dataArray) и не использовали плагин сопоставления.
0

Похоже, вам нужна точка останова на этом этапе для проверки значений. Если вы абсолютно уверены, что ваш JSON вернется правильно, это будет моим следующим шагом.

ko.applyBindings(notesViewModel, document.getElementById(node));

Являются ли переменные noteViewModel и узлом, что вы ожидаете?

  • 0
    узел верен, однако свойство notesArray для notesViewModel возвращается так: notesArray = c()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню