1

想知道是否有人有跟踪现场级更改跟踪的经验?我们正试图找出最简单/最好的方法来跟踪最终用户的任何和所有模型修改。我正在使用 ASP.NET MVC4、Knockout 和 Knockout Editables。

更新:由于跟踪功能的要求,仅检测对象是否脏是不够的,因为我需要确定发生了什么变化和值。我选择使用 for 循环来迭代模型属性,使用 KO Editables.hasChanges() 函数检测更改,并使用当前值和 .oldValue() (KO Editable) 构建自定义日志对象。

4

4 回答 4

8

由于您提到想要使用 KnockoutJS 实现更改跟踪的最简单和最好的方法,我建议查看 John Papa 最近在 Pluralsight 的单页应用程序课程中实施的内容。您可以阅读他关于更改跟踪的博客文章(底部链接)以获取更多信息。

它的要点是:他与 Hans Fjällemark 一起,在 Steve Sanderson(KnockoutJS 创建者)和 Ryan Niemeyer(KnockoutJS 核心贡献者)的提示下,创建了一个自定义更改跟踪工具 DirtyFlag。DirtyFlag 作为 KoLite 库的一部分提供,可以从github或 NuGet 下载:Install-Package KoLite。

博客文章包含启动和运行所需的所有步骤:

http://www.johnpapa.net/spapost10/

于 2012-11-06T18:42:49.503 回答
1

这是 Ryan Niemeyer 实现此类功能的文章:http ://www.knockmeout.net/2011/05/creating-smart-dirty-flag-in-knockoutjs.html

于 2012-11-06T17:53:23.007 回答
1

还有另一种解决方法,我将实施如下

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);
};
于 2013-04-15T07:17:12.350 回答
0

由于跟踪功能的要求,仅仅检测物体是否脏是不够的。我选择使用 for 循环来迭代模型属性,使用 KO Editables .hasChanges() 函数检测更改,并使用当前值和 .oldValue() (KO Editable) 构建自定义日志对象。

于 2012-11-06T20:55:21.627 回答