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 Post を参照して、自分の質問に答えることができました。
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);
}
});
問題は、これが機能するために空のビューモデルが必要だったことです。