隐藏顾客不该看到的行,重命名显示效果不佳的行,并控制所有内容的渲染顺序——完全不改动购物车中的实际内容。
这取代了以往用 CSS 或 style.display = 'none' 隐藏购物车元素的旧模式。行转换会在购物车每次渲染时应用,因此它能在更新、重新渲染和抽屉重新打开后依然生效。
**隐藏不等于移除。**被隐藏的行仍留在顾客的购物车中,仍计入总额,并会一路进入结账流程;它只是不会在抽屉中被绘制出来。它确实会从 getCart().items 和 itemCount 中消失,因此你自己的代码也不再能看到它。如果想真正移除它,请使用 removeItem。
值得隐藏的常见情况:
行上可用的四个 setter:
比较器采用与 Array.prototype.sort 期望的相同形式,并在隐藏和重命名之后运行:
对你不关心的行对返回 0。比较器以决胜(tie-breaker)方式组合:第一个返回非零值的比较器决定该行对的顺序,返回 0 则把决定权交给下一个比较器,而不是强行规定顺序。
行转换作用于购物车行。若要按国家/地区、市场或货币显示不同的区块设置(例如不同的奖励层级),请使用购物车编辑器中的条件。无需代码,且能在购物车重新设计后继续生效。购物车总额和购物车内容不是编辑器条件类型。
当你的规则是条件无法表达的内容(购物车中的商品 ID、自定义总额等)时,再使用 SDK。这种情况下,请在 shadow root 中查询公开的 cart-external-* 类:
这段代码在每次渲染之后运行,因此在你的代码隐藏区块之前,它可能会闪现出来。条件渲染没有这个问题,所以只要适用就优先使用条件渲染。
- **转换是初始化调用。**在初始化脚本的顶部注册它们;无需
ready()。
- **所有人的转换都会运行。**你的转换会与其他应用注册的转换组合。你无法替换它们的转换,它们也无法丢弃你的。
- **转换无法更改价格、数量或身份。**它只改变渲染的内容。要进行真正的更改,请使用操作。
- **抛出异常的转换会被静默跳过。**其余的仍会运行。开发时请检查
aftersellCartDebugEvents。
registerLineTransform 会返回一个注销函数,以便之后需要时撤销注册。