setInternalProperties 就是你告诉购物车它们是一体的方式。
组合的工作原理
这些通过
setInternalProperties 传递,而不是通过 Shopify。它们是仅用于渲染的覆盖层:永远不会进入 properties,永远不会持久化到 Shopify,也永远不会出现在订单上。
第 1 步:查明你的应用写入了什么
_ 开头),持有一个 ID、一个引用或套装的名称。典型的有 _bundle_id、_bundle_ref 或 _parent_id。记下确切的键名,以及是否有某一行被标记为主产品。
第 2 步:映射到规范属性
如果你的应用没有标记主产品,就完全省略
_aftersell_cart_bundle_role。购物车会为你挑选一个主行。你会得到什么
bundle 对象,抽屉将套装渲染为单个商品:
- 子项嵌套在主行之下,而不是显示为单独的行。
- **数量是原子的。**更改套装的数量会按每个子项的
perAnchorQty比例一起缩放所有成员,所以某组件数量为二的套装会保持这个二比一的关系。 - **移除是原子的。**移除套装会在一次请求中移除所有成员行,而不会留下孤立的组件。
- 只有一个价格行。显示什么遵循 Cart items 区块上的套装价格设置:所有成员的总价,或仅主产品的价格。
主行如何选定
_aftersell_cart_bundle_role设为parent的行。- 否则,价格最高的成员。
- 否则,购物车中的第一个成员。
值得了解的规则
- **套装至少需要两行。**只有一行携带套装 ID 时不会被处理,正常渲染。
- **Shopify 原生套装已经被处理。**Shopify 本身标记为组件化的行会被此组合跳过并自动适配。你只需要为添加独立行的应用使用它。
- **转换在每次渲染时运行。**保持它开销小且无副作用。不要在其内部调用操作或发起请求。
- **合并是累加式的。**你的属性会与其他转换设置的属性合并。对同一个键的真正冲突,由最后注册的转换胜出。
- **组合在隐藏和重命名之后、排序之前运行。**所以你用
setHidden隐藏的行永远不会成为套装的一部分,而比较器看到的是主行,而不是子项。
读取套装
bundle.memberKeys,它持有包括主行在内的每个成员的 key。
用于其他用途
setInternalProperties 的设计初衷,但这个覆盖层是一个通用通道,用于你从行派生出的仅用于渲染的数据。你放在那里的任何东西都可以在 line.internalProperties 和自定义代码区块中读取,而不触及真实购物车:
properties[...] 输入设置,这样无论由谁执行添加,值都能到达 Shopify。
后续阅读
registerLineTransform:这个方案所依赖的 hook。- 购物车对象:
bundle及其子项的结构。 - Cart items 区块:套装价格设置。