У меня небольшая проблема с Knockout.js и его плагином сопоставления. По сути, я хочу начать без данных, а затем при загрузке страницы сделать запрос Ajax для загрузки информации. Я знаю, что запрос Ajax работает по назначению, потому что я записываю в консоль данные по мере их возврата.
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 работает правильно.
l
Посмотреть разметку:
<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< /а>
-------------------- ОБНОВИТЬ --------------------------
Я смог ответить на свой вопрос, сославшись на этот пост StackExhange:
Неразбериха с подключаемым модулем сопоставления Knockout JS
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);
}
});
Проблема заключалась в том, что мне нужно было иметь пустую модель представления, чтобы это работало.