Javascript Knockoutjs跟踪ajax调用后的更改

Javascript Knockoutjs跟踪ajax调用后的更改,javascript,knockout.js,knockout-mapping-plugin,kolite,Javascript,Knockout.js,Knockout Mapping Plugin,Kolite,看到这里了吗 换句话说:我有一些ajax调用,在服务器的响应中我得到一些项目数组(knockout viewmodel中的项目) 我需要知道属性name在元素中更改为id==2etc,以便在服务器上自动保存更改(通过POST请求) 跟踪Items数组中每个元素的更改最简单/最简单的方法是什么 Knockout有一个内置的PubSub系统(由它们的可观察对象和其他核心元素使用) 您可以通过扩展每个属性来使用此系统,以便在编辑后发布有关特定主题的事件 然后需要订阅此主题,以便跟踪数据中的更改 看看

看到这里了吗

换句话说:我有一些ajax调用,在服务器的响应中我得到一些项目数组(knockout viewmodel中的项目)

我需要知道属性
name
在元素中更改为
id==2
etc,以便在服务器上自动保存更改(通过POST请求)


跟踪
Items
数组中每个元素的更改最简单/最简单的方法是什么

Knockout有一个内置的PubSub系统(由它们的可观察对象和其他核心元素使用)

您可以通过扩展每个属性来使用此系统,以便在编辑后发布有关特定主题的事件

然后需要订阅此主题,以便跟踪数据中的更改

看看

您可以通过提供自己的映射轻松实现这一点。下面是一个非常基本的示例,只是向您展示PubSub系统可以为您做些什么

如果我可以给你一个提示,最好不要保存每个属性,而是检测更改,并在一段时间后自动保存整个数组


因此,每个值都会在主题上发布一个“更改事件”,每次您收到主题消息时,超时都会重置。超时过期后,您可以保存BE中的更改。

Knockout有一个内置的PubSub系统(由其可观察对象和其他核心元素使用)

您可以通过扩展每个属性来使用此系统,以便在编辑后发布有关特定主题的事件

然后需要订阅此主题,以便跟踪数据中的更改

看看

您可以通过提供自己的映射轻松实现这一点。下面是一个非常基本的示例,只是向您展示PubSub系统可以为您做些什么

如果我可以给你一个提示,最好不要保存每个属性,而是检测更改,并在一段时间后自动保存整个数组


因此,每个值都会在主题上发布一个“更改事件”,每次您收到主题消息时,超时都会重置。超时过期后,您可以保存BE中的更改。

我共同编写了一个名为DirtyFlag的组件,用于检测敲除观测值(或一组观测值)中的更改。您可以从我的名为KoLite的库中获取,您可以从NuGet或GitHub中获取

dirtyFlag

// Your model
var Person = function () {
    var self = this;
    self.id = ko.observable();
    self.firstName = ko.observable().extend({ required: true });
    self.lastName = ko.observable().extend({ required: true });
    self.dirtyFlag = new ko.DirtyFlag([self.firstName,self.lastName]);
    return self;
};
将这些链接到viewmodel以检测是否有更改

//Property on your view model. myPerson is an instance of Person.
//Did it Change?
isDirty = ko.computed(function () {
    return myPerson().dirtyFlag().isDirty();
}),
//Resync Changes
dirtyFlag().reset();
然后重新同步更改

//Property on your view model. myPerson is an instance of Person.
//Did it Change?
isDirty = ko.computed(function () {
    return myPerson().dirtyFlag().isDirty();
}),
//Resync Changes
dirtyFlag().reset();

我共同编写了一个名为DirtyFlag的组件,用于检测敲除观测值(或一组观测值)的变化。您可以从我的名为KoLite的库中获取,您可以从NuGet或GitHub中获取

dirtyFlag

// Your model
var Person = function () {
    var self = this;
    self.id = ko.observable();
    self.firstName = ko.observable().extend({ required: true });
    self.lastName = ko.observable().extend({ required: true });
    self.dirtyFlag = new ko.DirtyFlag([self.firstName,self.lastName]);
    return self;
};
将这些链接到viewmodel以检测是否有更改

//Property on your view model. myPerson is an instance of Person.
//Did it Change?
isDirty = ko.computed(function () {
    return myPerson().dirtyFlag().isDirty();
}),
//Resync Changes
dirtyFlag().reset();
然后重新同步更改

//Property on your view model. myPerson is an instance of Person.
//Did it Change?
isDirty = ko.computed(function () {
    return myPerson().dirtyFlag().isDirty();
}),
//Resync Changes
dirtyFlag().reset();