Javascript Knockoutjs跟踪ajax调用后的更改
看到这里了吗 换句话说:我有一些ajax调用,在服务器的响应中我得到一些项目数组(knockout viewmodel中的项目) 我需要知道属性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系统(由它们的可观察对象和其他核心元素使用) 您可以通过扩展每个属性来使用此系统,以便在编辑后发布有关特定主题的事件 然后需要订阅此主题,以便跟踪数据中的更改 看看
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();