Javascript 如何使用ko.mapping.fromJS用来自Ajax调用的数据填充observableArray?

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

我有一个视图,其中包含一个模板,该模板有一个foreach来循环一组模型。然而,模型数组来自一个ajax调用

以下是该场景的一个示例:

// 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中没有使用),我注意到您使用的是一个模板。为什么这不起作用:然后在数据存在时更新?