Javascript 如何使用ko.mapping.fromJS用来自Ajax调用的数据填充observableArray?
我有一个视图,其中包含一个模板,该模板有一个foreach来循环一组模型。然而,模型数组来自一个ajax调用 以下是该场景的一个示例:Javascript 如何使用ko.mapping.fromJS用来自Ajax调用的数据填充observableArray?,javascript,ajax,knockout.js,Javascript,Ajax,Knockout.js,我有一个视图,其中包含一个模板,该模板有一个foreach来循环一组模型。然而,模型数组来自一个ajax调用 以下是该场景的一个示例: // Contained Model function SomeModel() { var self = this; this.Firstname = ko.observable(); this.Lastname = ko.observable(); this.Fullname = ko.dependentObservable(f
// Contained Model
function SomeModel() {
var self = this;
this.Firstname = ko.observable();
this.Lastname = ko.observable();
this.Fullname = ko.dependentObservable(function() {
return this.Firstname + " " + this.Lastname;
}, self);
}
// View Model
function SomeViewModel() {
var self = this;
this.ArrayOfModels = ko.mapping.fromJS([]);
this.GetModelsByAjax = function() {
$.ajax(...);
};
this.SuccessfullyRetrievedModelsFromAjax = function(models) {
ko.mapping.updateFromJS(self.ArrayOfModels, models);
};
}
ko.applyBindings(new SomeViewModel());
以下是观点:
//模板
这是ajax调用的json结果:
[{
"Firstname": "Joe",
"Lastname": "Blogs"
}, {
"Firstname": "Foo",
"Lastname": "Bar"
}]
目前,我只是将[]
传递到模型声明中,但是我不断收到以下错误:
名字没有定义
它在以下方面中断:返回新函数(“jQuery”,“$item”,body)代码>
有什么办法可以做我想做的吗?我觉得你想做的很好
这是一个有效的示例:您可以尝试与之协调
不过,我不知道从AJAX调用中恢复过来的“模型”到底是什么样子
这些行缺少一个=
,但我假设这只是一个键入错误,不会导致您列出的错误
<div data-bind"text: Firstname" />
<div data-bind"text: Lastname" />
我认为最好的办法是对web服务返回的模型进行一些日志记录,并确保它们没有以您不期望的方式嵌套
如果您有更多关于AJAX调用结果的信息或任何其他线索,我们将很乐意继续提供帮助。很抱歉,这是一个抽象的示例,我遗漏了另一个关键问题,这将说明我为什么需要使用模型,而不仅仅是Json结果。更新了初始问题以更准确地反映潜在问题,我需要访问模型上可靠的功能,但需要数据来自ajax。。。它更像大多数静态语言,其中结构在一个地方定义,数据在其他地方定义……我可能只需要手动进行如下映射:。否则,可以在映射选项中使用create
回调,但此处可能不需要,除非您要从mappin插件持续更新。这对你有用吗?手动映射现在应该可以了,映射在这个实例中显示后不会被更新。虽然其他人可能。。。非常感谢你的例子!在您的示例中,您有一个包含的模型(在JSFIDLE中没有使用),我注意到您使用的是一个模板。为什么这不起作用:然后在数据存在时更新?