想知道是否有人有跟踪现场级更改跟踪的经验?我们正试图找出最简单/最好的方法来跟踪最终用户的任何和所有模型修改。我正在使用 ASP.NET MVC4、Knockout 和 Knockout Editables。
更新:由于跟踪功能的要求,仅检测对象是否脏是不够的,因为我需要确定发生了什么变化和值。我选择使用 for 循环来迭代模型属性,使用 KO Editables.hasChanges() 函数检测更改,并使用当前值和 .oldValue() (KO Editable) 构建自定义日志对象。
想知道是否有人有跟踪现场级更改跟踪的经验?我们正试图找出最简单/最好的方法来跟踪最终用户的任何和所有模型修改。我正在使用 ASP.NET MVC4、Knockout 和 Knockout Editables。
更新:由于跟踪功能的要求,仅检测对象是否脏是不够的,因为我需要确定发生了什么变化和值。我选择使用 for 循环来迭代模型属性,使用 KO Editables.hasChanges() 函数检测更改,并使用当前值和 .oldValue() (KO Editable) 构建自定义日志对象。
由于您提到想要使用 KnockoutJS 实现更改跟踪的最简单和最好的方法,我建议查看 John Papa 最近在 Pluralsight 的单页应用程序课程中实施的内容。您可以阅读他关于更改跟踪的博客文章(底部链接)以获取更多信息。
它的要点是:他与 Hans Fjällemark 一起,在 Steve Sanderson(KnockoutJS 创建者)和 Ryan Niemeyer(KnockoutJS 核心贡献者)的提示下,创建了一个自定义更改跟踪工具 DirtyFlag。DirtyFlag 作为 KoLite 库的一部分提供,可以从github或 NuGet 下载:Install-Package KoLite。
博客文章包含启动和运行所需的所有步骤:
这是 Ryan Niemeyer 实现此类功能的文章:http ://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html
还有另一种解决方法,我将实施如下
var self = this;
// Following property is binded with you to indicate has changes
self.hasChanges = ko.observable(false);
// Following is the customer object and we want its field tracking
self.customer = ko.observable();
self.initializeCustomer = function (customer) {
// Following loop read all the properties from customer object
var properties = [];
for (var prop in customer)
{
if(customer.hasOwnProperty(prop) && typeof customer[prop] !== 'function')
{
properties.push(prop);
}
}
//following loop create new observable properties on trackingCustomer object and
// subscribe their event
var trackingCustomer = {};
for (var prop in properties)
{
trackingCustomer[properties[prop]] = ko.observable(properties[prop]);
trackingCustomer[properties[prop]].subscribe(function (newvalue)
{
self.hasChanges(true);
}
);
}
self.customer(trackingCustomer);
};
由于跟踪功能的要求,仅仅检测物体是否脏是不够的。我选择使用 for 循环来迭代模型属性,使用 KO Editables .hasChanges() 函数检测更改,并使用当前值和 .oldValue() (KO Editable) 构建自定义日志对象。