diff --git a/_posts/2012/2012-09-21-sku.md b/_posts/2012/2012-09-21-sku.md index ae9ee28..6e3c6a4 100644 --- a/_posts/2012/2012-09-21-sku.md +++ b/_posts/2012/2012-09-21-sku.md @@ -129,7 +129,7 @@ SKU,Stock Keeping Uint(库存量单位),由(销售属性:属性值)的键值 {% endhighlight %} 上面销售属性有两个: -颜色分类(编号1627207)的属性值有两种 军绿色(别名 格子裙(七分袖,模特版) 编号3232483) 天蓝色(别名 格子裙(九分袖,袖口无分叉) 编号3232484) +颜色分类(编号1627207)的属性值有两种 军绿色(别名 格子裙(七分袖,模特版) 编号3232483) 天蓝色(别名 格子裙(九分袖,袖口无分叉) 编号3232484) 尺码(编号20509)的属性值有四种 S(编号28314) M(编号28315) L(编号28316) XL(编号28317) 返回的所有的sku中只有那些库存量大于0的sku才是有效sku,一般情况sku属性个数不会超过3个。 @@ -152,16 +152,18 @@ c b a 1 1 0 bc 1 1 1 abc {% endhighlight %} -从上面的枚举可以看到,算abc的非空子集只需index 从1到2^n - 1 进行遍历,每次将index的二进制位中为1的对应位置的字母组成一个集合. +从上面的枚举可以看到,算abc的非空子集只需index 从1到2^n - 1 进行遍历,每次将index的二进制位中为1的对应位置的字母选中组成一个集合.最后得到所有可能存在的属性键值对组合的集合。 +检测的方法就是对非选中属性的每一个属性值进行检测,将其键值对和已经选择了的键值对组成一个集合然后判断这个集合是不是存在于上面算出的所有的集合中,如果存在则说明可选,否则不可选。 ### 三.功能实现 -控件实现的重点就是,某个属性值按钮选择后其他属性的属性值按钮的可选择性状态的更新,以及选择了一个属性值之后,需要检查当前已经选择的"属性属性值对"组合 能否构成一个完整的SKU,如果能则将控件的selectedSku设置为指定的SKU对象,否则设置为nil. +控件实现的重点就是,某个属性值按钮选择后其他属性的属性值按钮的可选择性状态的更新,以及选择了一个属性值之后,需要检查当前已经选择的"属性属性值对"组合 能否构成一个完整的SKU,如果能则将控件的selectedSku设置为指定的SKU对象以及更新显示的库存和价格,否则当前SKU设置为nil. #### 数据准备 -在数据准备阶段, -1. 需要建立一个SKU的Map,key为SKU的属性键值对组合 ,value为SKU对象 -2. 需要一个SKU的键值对可能存在的组合的一个Map,主要是为了检测一个属性值按钮选择之后对其他属性的属性值可选性的影响,key为键值对组合,value就为1,没有实际意义 -3. 如果在所有有存货的SKU中都没有某个属性值出现,那么需要将其剔除,要不然那个属性值按钮一直处于disabled状态 +在数据准备阶段, + +1. 需要建立一个SKU的Map,key为SKU的属性键值对组合 ,value为SKU对象 +2. 需要一个SKU的键值对可能存在的组合的一个Map,主要是为了检测一个属性值按钮选择之后对其他属性的属性值可选性的影响,key为键值对组合,value就为1,没有实际意义 +3. 如果在所有有存货的SKU中都没有某个属性值出现,那么需要将其剔除,要不然那个属性值按钮一直处于disabled状态 #### 创建和状态更新 当数据都准备好了,就开始针对每一个属性创建出其所有的属性值的按钮控件,按钮显示的属性值对应的中文。