gpt4 book ai didi

javascript - 仅将更改的属性发送到 Breeze 的 SaveChanges() 方法

转载 作者:行者123 更新时间:2023-11-30 10:19:11 25 4
gpt4 key购买 nike

在 Breezejs 中保存更改时,因为我有很多字段的实体,所以我想发送到服务器(到 Breeze SaveChanges() 方法)而不是整个实体,而只是实体的一个子集,包含只是属性发生了变化。我知道这就是实体内部的 OriginalValuesMap 属性的用途,它只是为了减少网络流量以提高性能(尽管这可能是一个非常小的改进)。上官Breezejs' website我找不到任何相关信息,也没有在互联网上找到。谢谢

最佳答案

我们出于不同的原因遇到了类似的要求。我们的应用程序的一部分与第 3 方 API 接口(interface),该 API 坚持使用增量进行放置(无论出于何种原因,放置完整实体都会导致服务器错误或严重的性能问题)。

我们最终推出了一个新的数据服务适配器来解决这个问题,这是一个相对轻松的过程。我们直接从基本的 AbstractDataServiceAdapter 扩展,但您可以在您碰巧使用的任何具体数据服务适配器之上使用自定义 _prepareSaveBundle。

您只需注册自定义适配器:

ctor = ->
@name = 'custom_ds'
ctor.prototype = new breeze.AbstractDataServiceAdapter() # or whatever your base is
ctor.prototype._prepareSaveBundle = (saveContext, saveBundle) ->
# Do whatever your base implementation does, but use helper.unwrapChangedValues
# instead of helper.unwrapInstance to get at the delta
breeze.config.registerAdapter 'dataService', ctor

然后将您的实体管理器绑定(bind)到使用它的数据服务:

breeze.config.initializeAdapterInstance 'dataService', 'custom_ds'
ds = new breeze.DataService
adapterName: 'custom_ds'
# plus whatever other properties you need to init
manager = new breeze.EntityManager
dataService: ds
# plus whatever other properties you need to init

但是,如果您这样做只是为了减少有效载荷,那么由于 Jay Traband 提出的所有原因,这可能不值得麻烦和增加脆弱性。

关于javascript - 仅将更改的属性发送到 Breeze 的 SaveChanges() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22192113/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com