如何检测实体 EntityState 的更改?

2023-11-22

我想在客户列表的每一行上放置一个“删除”按钮和一个“取消”按钮。当客户“未更改”时,“取消”按钮将被禁用。但是,当客户转换到更改状态(“已添加”、“已修改”、“已删除”)时,我想启用“取消”按钮,以便用户可以在保存之前撤消更改(无论它们是什么)。

我几乎可以通过订阅来做到这一点customer.entityAspect.propertyChanged。财产变化预示着潜在的变化EntityState。我可以订阅该事件并让我的处理程序更新isChanged我已将其添加到我的客户实体中。然后我将“取消”按钮启用绑定到isChanged我可以走了。

But the propertyChanged仅当发生以下情况时才会引发事件数据属性变化,例如customer.Name("New Co.");。当用户单击“删除”按钮时不会引发它。 “删除”触发器customer.entityAspect.setDelete();它不触及数据属性;它只是改变了客户的EntityState.

(1) 为什么不改变客户的EntityState raise propertyChanged(2) 我如何监听更改EntityState这样我就可以控制“取消”按钮?

PS:我正在使用淘汰赛。

P.P.S:这个问题的灵感来自于之前的一个SO问题"EntityAspect.setDeleted 不会触发订阅的 propertyChanged 事件".


你是对的,微风不提高propertyChanged当。。。的时候EntityState变化。也许应该如此。我们会考虑这一点。

Breeze 也没有单独的活动在实体上 - no entityStateChanged事件 - 当发生事件时通知您EntityState变化。我们已经考虑过好几次了。我们一直劝说自己不要这么做。

有一个完美的解决方案,其性能比专用的更好entityStateChanged事件。现在你必须自己编码。

诀窍是倾听EntityManager,而不是实体。您将在以下位置找到此解决方案的一种变体:文档代码“教学测试”样本;寻找 ”可以通过entityManager.entityChanged控制自定义ko的entityState属性“ 在里面实体测试.js module.

我会调整它以适合您的示例。其本质如下:

  1. 订阅entityManager.entityChanged事件;当它被升起时and原因是一个实体的EntityState更改,您更新该实体的isChanged布尔 KO 可观察(如果该属性存在)。

  2. Add the isChanged可观察到应该以这种方式观察的实体类型。

以下是步骤 #1 的示例:监听状态更改



// subscribe with handler watching for EntityState changes
addEntityStateChangeTracking(manager);

function addEntityStateChangeTracking(entityManager) {

    if (entityManager._entityStateChangeTrackingToken) { return; } // already tracking it

    // remember the change tracking subscription with a token; 
    // might unsubscribe with that token in future
    entityManager._entityStateChangeTrackingToken =
        entityManager.entityChanged.subscribe(entityChanged);

    var entityStateChangeAction = breeze.EntityAction.EntityStateChange;

    function entityChanged(changeArgs) {            
        if (changeArgs.entityAction === entityStateChangeAction) {
            var entity = changeArgs.entity;
            if (entity && entity.isChanged) { // entity has the observable
                var isUnchanged = entity.entityAspect.entityState.isUnchanged();
                entity.isChanged(!isUnchanged);
            }
        }
    }
}
  

我们来谈谈步骤#2:添加isChanged可观察到类型。你似乎已经解决了这个问题,但我不确定如何解决。也许将其添加到类型中的最佳位置是在类型的初始值设定项因此,您可以确定该属性将存在,​​无论该实体是通过查询创建还是具体化。这是一个例子:



var store = manager.metadataStore;

function customerInit(entity) {
    var isUnchanged = entity.entityAspect.entityState.isUnchanged();
    entity.isChanged = ko.observable(!isUnchanged);
}

store.registerEntityTypeCtor('Customer', null, customerInit);
  

这一切看起来工作量很大。如果 Breeze 提高了的话会更容易propertyChanged事件,当EntityState变化。我们会更多地考虑......可能会有一些很好的反驳论点。同时,我认为您在这里看到的是最好的方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检测实体 EntityState 的更改? 的相关文章

随机推荐

  • 用户已通过身份验证,但访问令牌在哪里?

    我有一个 Web 应用程序 它使用隐式客户端向 Identity Server 4 验证用户身份 我需要该用户的访问令牌 以便我可以调用另一个 API 需要明确的是 我有一个身份服务器 使用身份服务器 4 创建 我在 Asp net cor
  • “动态atexit析构函数”中的“动态”是什么意思?

    我最近将我的应用程序从 VC 7 移植到 VC 9 现在 它有时会在退出时崩溃 运行时开始调用全局对象析构函数 并且其中之一发生访问冲突 每当我观察调用堆栈时 最上面的函数是 CMyClass CMyClass lt crashes her
  • 如何在Python中使用回调函数?

    我想知道如何正确使用 python 2 7 回调函数 我的代码中有一些来自 Cherrypy auth 示例的回调函数 这些回调返回一个可以计算为 True 或 False 的函数 具体取决于登录用户是否在组中 我想知道如果我写这样一段代码
  • IIS6 中的 ASP.NET MVC 压缩选项

    目前我仍坚持使用 IIS6 for ASP NET MVC 如我还无法升级到 Server 2008 它似乎不知道我的 RESTful URL 是动态文件并且没有压缩它们 我所有旧的 aspx 文件都被压缩 如 Fiddler 中所示 但不
  • 在 vs 2010 中开箱即用运行 asp.net mvc 2 项目时出错

    我创建了一个新的解决方案 它构建了精细的定位框架 4 0 但是当我运行它时 我的浏览器会显示 无法找到该资源 描述 HTTP 404 您正在查找的资源 或其依赖项之一 可能已被删除 名称已更改或暂时不可用 请检查以下 URL 并确保拼写正确
  • c# 如何从日期中删除AM/PM

    我想获取今天的日期时间 但没有 AM PM DateTime dt DateTime Now 给我 23 05 2016 03 16 51 上午 我想要的结果是 2016年5月23日 15 16 51 The DateTime本身不保留任何
  • ASP.NET Core 中信任本地 HTTPs 证书时出现问题

    我正在按照在线教程创建 ASP NET Core Web 应用程序 我遵循了一切 但无法信任本地 HTTPS 证书 当我第一次运行该应用程序时 我收到一条错误消息 访问控制列表 acl 结构无效 我尝试用谷歌搜索此错误 但找不到与我的 AS
  • 使用 vbscript 创建 Excel 文件

    如何使用以下命令创建 Excel 文件VBScript 我搜索了网络 但它只提到打开现有文件 这是从网上提取的如下图 Set objExcel CreateObject Excel Application Set objWorkbook o
  • 是否可以中断 ExecutorService 的特定线程?

    如果我有一个ExecutorService我向其提供可运行任务 我可以选择一个并中断它吗 我知道我可以取消返回的未来 也提到这里 如何中断执行器线程 但是我怎样才能提高InterruptedException Cancel 似乎没有做到这一
  • 如何在 AsyncTask 中从 onPostExecute 发送回数据?

    我的问题与此相同Activity 的实例变量未在 AsyncTask 的 onPostExecute 中设置或如何将数据从 AsyncTask 返回到主 UI 线程但我想将数据发送回同一个调用活动 不启动意图的活动总是重新启动活动 一种选择
  • 读取 JPG 文件的 XMP 元数据

    我正在开发 Android 应用程序 该应用程序应该利用 Google 相机的新深度图生成功能 基本上谷歌已经描述了所使用的元数据here 我可以访问大部分元数据 但不幸的是 最重要的数据被编码为extendXmp 并且我无法获得任何XMP
  • sql server 将日期转换为字符串 MM/DD/YYYY

    我正在使用 SQL Server 2008 我有以下内容 select convert varchar 20 fmdate from Sery 如何将日期转换为字符串 使其显示为 MM DD YYYY 该任务应该由软件堆栈中的下一层来完成
  • 如何在 C++ 中编码大型复杂的常量数据结构

    过去 我使用过 gccC99 样式复合文字扩展到 C 来编码代码中的嵌套常量数据结构 这是一个例子 include
  • 获取文档中的所有链接

    给定 Google Docs Drive 中的 普通文档 例如段落 列表 表格 其中包含分散在整个内容中的外部链接 如何使用 Google Apps 脚本编译存在的链接列表 具体来说 我想通过搜索来更新文档中所有损坏的链接oldText在每
  • Instagram Instagram 标题不起作用

    我有以下用于在 Instagram 上分享文章的代码 void shareInstagram NSURL instagramURL NSURL URLWithString instagram app if UIApplication sha
  • 如何将外部 DOM 附加到 React 组件?

    我有一个页面 其中包含在服务器中呈现的表单 它处理验证以及选择的正确值 我想隐藏该表单的 DOM 并将其附加到 React 组件中 以便我可以在 React router 中使用它 const NewItem React createCla
  • UICollectionView 滚动很慢

    我刚刚创建了一个UICollectionView其中用户可以将手机中的图像添加到应用程序的相册功能中 我将图像保存到文档目录中的子目录中 以便可以添加和删除更多图像 但是 当我上下滚动集合视图时 它非常滞后 怎样才能让滚动条又漂亮又流畅呢
  • “点击恢复”暂停文本 SpriteKit

    我知道 SpriteKit 已经处理了当应用程序进入非活动状态时暂停游戏的问题 但我想做的是在应用程序重新进入活动状态时添加一个 SKLabelNode 点击恢复 现在它正在正确调用我的函数并暂停游戏 但文本没有显示 AppDelegate
  • 具有多个自变量的 Python curve_fit

    蟒蛇的curve fit计算具有单个自变量的函数的最佳拟合参数 但是有没有办法使用curve fit或者其他什么 以适应具有多个自变量的函数 例如 def func x y a b c return log a b log x c log
  • 如何检测实体 EntityState 的更改?

    我想在客户列表的每一行上放置一个 删除 按钮和一个 取消 按钮 当客户 未更改 时 取消 按钮将被禁用 但是 当客户转换到更改状态 已添加 已修改 已删除 时 我想启用 取消 按钮 以便用户可以在保存之前撤消更改 无论它们是什么 我几乎可以