var SIZE_LOOKUP = { "XS": "X-SMALL", "S": "SMALL", "M": "MEDIUM", "L": "LARGE", "XL": "X-LARGE", "XXL": "XX-LARGE", "XXXL": "XXX-LARGE", }; var ProductView = View.extend({ el: "#product", events: { "click .left": "prev", "click .right": "next", "touchstart .gallery": "touchstart", "touchmove .gallery": "touchmove", "touchend .gallery": "touchend", "click .size": "select_size", "click .color": "select_color", "click .share": "share", }, initialize: function(){ this.$num = this.$(".num") this.$title = this.$(".title") this.$type = this.$(".type") this.$price = this.$(".price") this.$size = this.$(".size") this.$color = this.$(".color") this.$body = this.$(".body") }, show: function(){ document.body.className = "product" }, item: null, size: null, color: null, code: null, load: function(data){ var name_partz = data['ModelNames'].split(' ') var num = name_partz.shift() var title = name_parts.join(' ') var type = data['MicroCategory'].toUpperCase() var price = "$" + data['DiscountedPrice'] + ".00" var size = data['Sizes'][0] var size_label = SIZE_LOOKUP[size] var color = data['Colors'][0] var color_label = color['Text'] var body = "" this.item = data this.color = color this.size = size this.code = data['DefaultCode10'] this.$num.html(num) this.$title.html(title) this.$type.html(type) this.$price.html(price) this.$size.html(size_label) this.$color.html(color) this.$body.html(body) // TODO: fetch product from item API, get other Code10s so you can populate the gallery }, select_size: function(){ if (this.item['Sizes'].length == 0) { return } var mapped_sizes = this.item['Sizes'].map(function(size){ return { id: size['Id'], label: SIZE_LOOKUP[ size['Text'] ], value: size, } }) app.selector.select(mapped_sizes, function(size){ this.size = size.value this.$size.html(size.label) }.bind(this)) }, select_color: function(){ if (this.item['Colors'].length == 0) { return } var mapped_colors = this.item['Colors'].map(function(color){ return { id: color['Id'], label: color['Text'], value: color, } }) app.selector.select(mapped_colors, function(color){ this.color = color.value this.$color.html(color.label) }.bind(this)) }, share: function(){ }, prev: function(){ }, next: function(){ }, touchstart: function(e){ }, touchmove: function(e){ }, end: function(e){ }, }) /* { "Code8": "41504876", "BrandName": "STONE ISLAND", "DefaultCode10": "41504876MA", "MicroCategory": "Jacket", "MacroCategory": "COATS & JACKETS", "FullPrice": 728, "DiscountedPrice": 437, "PriceListId": 155702498, "ModelNames": "41764 FLOWING CAMO WATRO", "Sizes": [ { "Id": 4, "Text": "S", "ClassFamily": "INT", "Labeled": true }, { "Id": 6, "Text": "L", "ClassFamily": "INT", "Labeled": true }, { "Id": 7, "Text": "XL", "ClassFamily": "INT", "Labeled": true }, { "Id": 8, "Text": "XXL", "ClassFamily": "INT", "Labeled": true } ], "Colors": [ { "Id": 3152, "Code10": { "Id": 6769575, "Value": "41504876MA" }, "Description": "Green", "MacroColorId": 3152, "Rgb": "3C941F" } ], "SizeTypeId": 928, "HasFlipSide": false, "SeasonOfSale": "PE15", "SalesLineId": "126", "SalesLine": "18_STONE ISLAND", "MarketId": 19, "Criteria": { "Sizes": [ "3", "5", "6", "7" ], "Looks": [], "Styles": [], "WashTypes": [], "WashStories": [], "WashCodes": [], "Waists": [], "Fabrics": [], "ColorTypes": [], "ModelNames": [], "Material": [] }, "NoveltyPoints": 0, "C10Attributes": [ { "Key": "MFC", "Value": "621541764CC-6215-64V0050", "C10": "41504876MA" } ], "MacroCategoryId": 224, "MicroCategoryId": 1319 }, */