我在使用 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 帖子来回答我自己的问题:
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);
}
});
问题是我需要一个空的视图模型才能工作。