gpt4 book ai didi

ember.js - EmberData 设置值可防止模型保存后将来自动加载数据

转载 作者:行者123 更新时间:2023-12-02 05:14:51 25 4
gpt4 key购买 nike

在 EmberData 中调用 model.save()导致模型通过任何合适的适配器被持久化。如果适配器返回一些数据(例如来自 API 的 JSON),模型将使用该数据进行更新。

我偶然发现了一个不正确的序列。

在结帐流程的凭证系统中 voucherCodeorder 上输入模型。当按下“应用”按钮时,订单将通过 order.save() 保存。并且凭证因此被提交给服务器。

如果优惠券代码有效,则 voucherValue字段填充了一个数字。如果优惠券代码无效,则 422错误返回标准 errors根据 http://emberjs.com/api/data/classes/DS.Errors.html 的对象

现在,这就是事情出错的地方。如果输入的代码返回 voucherValue300 Controller 属性计算折扣。

discount: function () {
var discount = this.get('model.voucherValue');
// some calculation
return discount;
}.property('model.voucherValue')

无论出于何种原因,如果用户输入了无效代码,我们将返回如上所述的错误。服务器去除折扣并设置 voucherValue0
由于错误响应不包含 catch 中的更新数据的 save我们手动更新它。
order.save().then(function () {

}).catch(function (error) {

order.set('voucherValue', 0);
});
discount computed property在设置 voucherValue 时按预期更新.但是,检查订单模型显示 order._data.voucherValue还是原来的 300来自第一个有效凭证代码的值 - 因为 EmberData 不知道该值是否保留在服务器上。

如果我们然后输入返回 voucherValue 的有效凭证代码的 300 (和原来一样) discount不重新计算计算属性 .

看来 Ember 正在根据 order._data 检查返回的数据值。并且因为没有区别不会触发任何属性重新计算。

我尝试了不同的解决方法,但一直无法找到可靠工作的东西。

令人沮丧的是,似乎没有一种可靠的方法来访问返回的数据并手动设置 voucherValue从返回的数据。即使返回的数据为 voucherValue 设置了一个值以下是正确的:
order.save().then(function (savedOrder) {

savedOrder.get('voucherValue') === 0; //true

}).catch(function (error) {
order.set('voucherValue', 0);
});

但是,如果在无效凭证和 voucherValue 之后输入不同的凭证。是不同的(比如 450 )一切都按预期工作。

这是 EmberData 中的错误吗?有没有知道的解决方法。在尝试重新设计整个系统的实现方式之前,我乐于接受建议并愿意尝试任何事情。

最佳答案

你的这段代码似乎有问题:

order.save().then(function (savedOrder) {
savedOrder.get('voucherValue') === 0; //true
}).catch(function (error) {
order.set('voucherValue', 0);
});
catch函数是 promise 捕获的代理。但是,promise 通常期望将第二个参数传递给 then函数,像这样:
order.save().then(function (savedOrder) {
savedOrder.get('voucherValue') === 0; //true
}, function (error) {
order.set('voucherValue', 0);
});

第二个函数代表 reject resolve/reject 的路径 Promise 使用的对.见: http://emberjs.com/api/data/classes/DS.Model.html#method_save

关于ember.js - EmberData 设置值可防止模型保存后将来自动加载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30535022/

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