У меня проблема с Knockout.js и его плагином для сопоставления. По сути, я хочу начать с отсутствия данных, а затем на загрузке страницы сделать запрос Ajax для загрузки информации. Я знаю, что запрос Ajax работает как предполагаемая причина. Я регистрирую на консоли данные по мере их возвращения.Наблюдаемый массив Knockout.js не обновляется с сервера при использовании плагина сопоставления
var projectId = @Model.Project.Id;
var stories;
viewModel = ko.mapping.fromJS(stories);
$.ajax({
type: "GET",
url: "/Projects/JsonDetails",
data: {id: projectId},
success: function (data) {
stories = data.stories;
ko.mapping.fromJS(stories, viewModel);
console.log(stories);
}
});
Консоль правильно регистрирует данные. поэтому я знаю, что запрос Ajax работает правильно.
л
разметки:
<section id="project-stories" data-bind="foreach: stories">
<div class="project-story-container drop-shadow">
<div class="story-summary">
Story Summary
</div>
<div class="story" data-bind="attr:{'data-id': Id}">
As a <span class="actor" data-bind="text: Actor"> </span> I want to <span class="objective" data-bind="text: Objective"> </span>, so that <span class="justification" data-bind="text: Justification"></span>.
</div>
<div class="story-controls">
<a href="#">Edit</a>
</div>
</div>
</section>
Я даже попытался назвать:
var projectId = @Model.Project.Id;
var stories;
viewModel = ko.mapping.fromJS(stories);
ko.applyBindings(viewModel);
$.ajax({
type: "GET",
url: "/Projects/JsonDetails",
data: {id: projectId},
success: function (data) {
stories = data.stories;
ko.mapping.fromJS(stories, viewModel);
console.log(stories);
}
});
Но это только делает его хуже причина KO жалуется, что привязки не являются настроить.
Может ли кто-нибудь увидеть, что я делаю неправильно? В конце концов, я хочу, чтобы модель представления имела больше событий, подключенных к сети, и я знаю, что это будет еще одна проблема. Но прямо сейчас я не могу даже привязать привязки к правильному обновлению, когда заканчивается запрос Ajax.
Уходя учебник здесь: http://knockoutjs.com/documentation/plugins-mapping.html
-------------------- UPDATE ------------- -------------
Я был в состоянии ответить на мой собственный вопрос, ссылаясь этот StackExhange сообщение:
Knockout JS mapping plugin confusion
var projectId = @Model.Project.Id;
var viewModel ={};
$.ajax({
type: "GET",
url: "/Projects/JsonDetails",
data: {id: projectId},
success: function (data) {
viewModel.stories = ko.mapping.fromJS(data.stories);
ko.applyBindings(viewModel);
}
});
Проблема была мне нужна, чтобы иметь пустая модель для этого работать.
Возможно, я смущен.Я думал, что использование плагина сопоставления было таким, что мне не пришлось бы определять все мои наблюдаемые. Мое понимание заключалось в том, что вызов «ko.mapping.fromJS (данные)»; создадут их для меня. Что делать, если у меня есть большой объект со связью больше наблюдаемых? – sheldonj
Правильно - это создаст наблюдаемые объекты. Однако, если вы попытаетесь использовать свою модель просмотра до того, как будут определены все наблюдаемые (например, загрузка страницы), вы получите сообщение об ошибке (например, ваши истории не будут определены). –
Я не заметил, что вы не применяете привязку при загрузке страницы, поэтому, очевидно, вы не получите ошибку в этом случае. –