Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (2022)

Table of Contents
Sapim Spokes Nipples Accessories

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (1)

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (2)

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (3)

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (4)

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (5)

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (6)

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (7)

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (8)

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (9)

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (10)

* The colors of the products displayed in photos may vary from one screen to another depending on their calibration.

27.5" rim dedicated to the ALL MOUNTAIN BIKE Their ideal partner... Oversized tyres: Pure fun. The XM 521 offers all the support required by the most committed of riders, yet it remains very light. A crucial quality when you know that big tyres are made for trail riding and that all riders prefer to use their energy to jump over obstacles rather than waste it dragging extra weight. The XM 521, the rim that makes riders smile.

'; } else { htmlSelect = '

'; if (!nolabel) { htmlSelect += ' '; } htmlSelect += '

'; } retour.push(htmlSelect); }); return retour; } function generateAllSelect(baseElement, path) { let retour = new Array(); Object.entries(baseElement).forEach(function (item) { retour[item[0]] = generateSelect(item[1][0], item[1][2], item[0], path); }); return retour; } function addSelectsToHtml(id, selects, path) { let html = ''; Object.entries(selects).forEach(function (item) { let isNoAttributes = ''; if (!attributes.includes(item[0])) { isNoAttributes = 'noAttributes'; } let nolabel = false; if (item[1].length == 1) { nolabel = true; } html += '

'; if (!nolabel) { html += '' + item[0] + ''; } item[1].forEach(function (it, i) { html += it; }); html += '

'; }); $('#' + id).html(html); } /*function loadSelectBase() { let htmlSelect = '

'; htmlSelect += '

'; $('#selectConfig').append(htmlSelect); }*/ function loadConfigRoue(index) { let backwheel = dataConfig[index].config.back_wheel; let frontwheel = dataConfig[index].config.front_wheel; let isbackwheel = true; let isfrontwheel = true; $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); if (JSON.stringify(backwheel) === '{}') { isbackwheel = false; } if (JSON.stringify(frontwheel) === '{}') { isfrontwheel = false; } if (isbackwheel && isfrontwheel) { $("#roueConfig input[type=radio][name=roueConfig][value='P'] + label").click(); } else { if (isbackwheel) { $("#roueConfig input[type=radio][name=roueConfig][value='B'] + label").click(); $("#roueConfig input[type=radio][name=roueConfig][value='P']").attr('disabled', true); $("#roueConfig input[type=radio][name=roueConfig][value='F']").attr('disabled', true); $("#roueConfig input[type=radio][name=roueConfig][value='P'] + label").hide(); $("#roueConfig input[type=radio][name=roueConfig][value='F'] + label").hide(); } if (isfrontwheel) { $("#roueConfig input[type=radio][name=roueConfig][value='F'] + label").click(); $("#roueConfig input[type=radio][name=roueConfig][value='P']").attr('disabled', true); $("#roueConfig input[type=radio][name=roueConfig][value='B']").attr('disabled', true); $("#roueConfig input[type=radio][name=roueConfig][value='P'] + label").hide(); $("#roueConfig input[type=radio][name=roueConfig][value='B'] + label").hide(); } } } function loadSelectBase() { let htmlSelect = '

'; //htmlSelect += '

'; $('#selectConfig').html(htmlSelect); } ; function selectVariante(o) { miniConfigLoader('Start'); console.log(o.value); let id_product = $('#product-details').data("product").id; let quantity = $('#quantity_wanted').val(); config = buildConfig(); $('.product_date_available').addClass('toRefresh'); if (config['complete'] === true) { sendCustomization(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } else { sendCustomizationIncomplete(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } } function buildConfig() { jsonConfig = {}; configComplete = true; let configRoue = $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); let selector = '[data-groupminiconfig]'; if (configRoue == 'P') { selector = '.configArriere [data-groupminiconfig], .configAvant [data-groupminiconfig]'; } if (configRoue == 'F') { selector = '.configAvant [data-groupminiconfig]'; } if (configRoue == 'B') { selector = '.configArriere [data-groupminiconfig]'; } $(selector).each(function (index, item) { //console.log(item); path = $(item).data('groupminiconfig'); itemvalues = $(item).find(".miniConfig-value"); re = /\[(.*?)\]/g; groupattr = re.exec(path); groupattr = groupattr[1].replace(/^"(.+(?="$))"$/, '$1'); dataReverse = eval(path); idprddataconfig = 0; if (attributes.includes(groupattr)) { groupvalue = []; $(itemvalues).each(function (index2, item2) { cle = $(item2).data('attrminiconfig'); valeur = ''; if ($(item2).is("select")) { valeur = $(item2).val(); } if ($(item2).is("span")) { valeur = $(item2).text(); } groupvalue[cle] = valeur; }); key = JSON.stringify(Object.assign({}, groupvalue)); console.log(key); idprddataconfig = dataReverse[1][key]; } else { valeur = ''; if ($(itemvalues).is("select")) { valeur = $(itemvalues).val(); } if ($(itemvalues).is("span")) { valeur = $(itemvalues).text(); } idprddataconfig = dataReverse[1][valeur]; } re2 = /\.(.*?)\[/g; attrType = re2.exec(path); attrType = attrType[1]; if (idprddataconfig === undefined && attrType === 'base') { /*jsonConfig = undefined; return false;*/ configComplete = false; } selectprd = {}; selectprd.type = groupattr; if (idprddataconfig !== undefined) { //let indexConfig = $('#selectConfig select').val(); let indexConfig = $('#selectConfig input[type=radio][name=configRayon]:checked').val(); refpath = "dataConfig[" + indexConfig + "].config." + path + ".products['" + idprddataconfig + "'].reference"; selectprd.ref = eval(refpath); if (qtyMulti.includes(groupattr)) { frontOrBack = path.split('.'); frontOrBack = frontOrBack[0]; //pathNbRayon = "dataConfig[" + indexConfig + "].config." + frontOrBack + ".nb_rayons"; pathNbRayonReel = "dataConfig[" + indexConfig + "].config." + frontOrBack + ".nb_rayons_reel"; nbRayon = eval(pathNbRayonReel); selectprd.qty = parseInt(nbRayon); } else { selectprd.qty = 1; } basePath = path.split('['); basePath = basePath[0]; basePath = basePath.split('.'); if (jsonConfig[basePath[0]] === undefined) { jsonConfig[basePath[0]] = {}; } if (jsonConfig[basePath[0]][basePath[1]] === undefined) { jsonConfig[basePath[0]][basePath[1]] = []; } jsonConfig[basePath[0]][basePath[1]].push(selectprd); } }); retourConfig = {}; retourConfig['complete'] = configComplete; retourConfig['config'] = JSON.stringify(jsonConfig); retourConfig['type'] = configRoue; return retourConfig; } function initConfig(index) { console.log("init config"); //miniConfigLoader('Start'); $('#wBtnAddToCart').prop('disabled', true); //$('#product-information .product-add-to-cart-inner').hide(); $('#product-information .product-add-to-cart-msg').show(); /*let dataProduct = $('#product-details').data('product'); $('#wProductPrice').html(dataProduct.price); $('#wProductWeight').html(baseWeight);*/ let configRoue = $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); $('.configArriere').hide(); $('.configAvant').hide(); if (configRoue == "P" || configRoue == "B") { basearriere = getBaseData(dataConfig[index].config.back_wheel.base); back_wheel = {}; back_wheel.base = basearriere; console.log(basearriere); selectarriere = generateAllSelect(basearriere, "back_wheel.base"); addSelectsToHtml('roueArriere', selectarriere, "back_wheel.base"); optionsarriere = getBaseData(dataConfig[index].config.back_wheel.options); back_wheel.options = optionsarriere; selectoptionsarriere = generateAllSelect(optionsarriere, "back_wheel.options"); addSelectsToHtml('optionsArriere', selectoptionsarriere, "back_wheel.options"); $('.configArriere').show(); if (Array.isArray(optionsarriere) && Object.keys(optionsarriere).length > 0) { $('.optionsArriere .product-maintitle').show(); } else { $('.optionsArriere .product-maintitle').hide(); } } if (configRoue == "P" || configRoue == "F") { baseavant = getBaseData(dataConfig[index].config.front_wheel.base); front_wheel = {}; front_wheel.base = baseavant; selectavant = generateAllSelect(baseavant, 'front_wheel.base'); addSelectsToHtml('roueAvant', selectavant, 'front_wheel.base'); optionsavant = getBaseData(dataConfig[index].config.front_wheel.options); front_wheel.options = optionsavant; selectoptionsavant = generateAllSelect(optionsavant, "front_wheel.options"); addSelectsToHtml('optionsAvant', selectoptionsavant, "front_wheel.options"); $('.configAvant').show(); console.log(optionsavant); if (Array.isArray(optionsavant) && Object.keys(optionsavant).length > 0) { $('.optionsAvant .product-maintitle').show(); } else { $('.optionsAvant .product-maintitle').hide(); } } let id_product = $('#product-details').data("product").id; let quantity = $('#quantity_wanted').val(); config = buildConfig(); if (config['complete'] === true) { sendCustomization(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } else { sendCustomizationIncomplete(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } availableDateLoader('Start'); //let indexConfig = $('#selectConfig input[type=radio][name=configRayon]:checked').val(); getAvailableDate(config['config'],quantity); //synchronisation verticale des blocs du configurateur $("#avant .form-group").each(function () { let elmt = $(this).data('elemtminiconfig'); //console.log('[data-elemtminiconfig="' + elmt + '"]'); let topAvant = $('#avant [data-elemtminiconfig="' + elmt + '"]').position().top; if ($('#arriere [data-elemtminiconfig="' + elmt + '"]').length > 0) { let topArriere = $('#arriere [data-elemtminiconfig="' + elmt + '"]').position().top; let diffTop = topAvant - topArriere; if (diffTop > 0) { let newmargintoparriere = parseInt($('#arriere [data-elemtminiconfig="' + elmt + '"]').css('margin-top')) + diffTop; $('#arriere [data-elemtminiconfig="' + elmt + '"]').css('margin-top', newmargintoparriere + 'px'); } if (diffTop < 0) { let newmargintopavant = parseInt($('#avant [data-elemtminiconfig="' + elmt + '"]').css('margin-top')) - diffTop; $('#avant [data-elemtminiconfig="' + elmt + '"]').css('margin-top', newmargintopavant + 'px'); } } }); } function sendCustomization(idproduct, field, config, type, quantity) { //let indexConfig = $('#selectConfig select').val(); let indexConfig = $('#selectConfig input[type=radio][name=configRayon]:checked').val(); console.log('sendCustomization'); console.log(JSON.parse(config)); $.ajax({ type: 'POST', url: "https://www.jpracingbike1.com/en/module/wattminiconfig/ajax", cache: false, async: true, data: { action: 'SendCustomization', ajax: true, idproduct: idproduct, field: field, config: config, type: type, indexConfig: indexConfig, quantity: quantity }, success: function (result) { result = JSON.parse(result); if (result.result == 'ok') { console.log(result); $('#product_customization_id').val(result.id_customizedData); $('#wProductPrice').html(result.price); $('#wProductWeight').html(result.weight); let configRoue = $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); if (configRoue === 'P') { $('#wProductTolerance').html('30'); } else { $('#wProductTolerance').html('15'); } $('#wMiniConfigPrdsInfos').html(result.prdsInfos); $('#wBtnAddToCart').prop('disabled', false); //$('#product-information .product-add-to-cart-inner').show(); $('#product-information .product-add-to-cart-msg').hide(); } else { $('#wBtnAddToCart').prop('disabled', true); //$('#product-information .product-add-to-cart-inner').hide(); $('#product-information .product-add-to-cart-msg').show(); } miniConfigLoader('Stop'); } }); } function sendCustomizationIncomplete(idproduct, field, config, type, quantity) { //let indexConfig = $('#selectConfig select').val(); let indexConfig = $('#selectConfig input[type=radio][name=configRayon]:checked').val(); //$('#product-information .product-add-to-cart-inner').hide(); $('#product-information .product-add-to-cart-msg').show(); console.log('sendCustomizationIncomplete'); console.log(JSON.parse(config)); //miniConfigLoader('Start'); $.ajax({ type: 'POST', url: "https://www.jpracingbike1.com/en/module/wattminiconfig/ajax", cache: false, async: true, data: { action: 'SendCustomization', ajax: true, idproduct: idproduct, field: field, config: config, type: type, indexConfig: indexConfig, quantity: quantity }, success: function (result) { result = JSON.parse(result); if (result.result == 'ok') { console.log(result); $('#product_customization_id').val(result.id_customizedData); $('#wProductPrice').html(result.price); $('#wProductWeight').html(result.weight); let configRoue = $('#roueConfig input[type=radio][name=roueConfig]:checked').val(); if (configRoue === 'P') { $('#wProductTolerance').html('30'); } else { $('#wProductTolerance').html('15'); } $('#wMiniConfigPrdsInfos').html(result.prdsInfos); $('#wBtnAddToCart').prop('disabled', true); } else { $('#wBtnAddToCart').prop('disabled', true); } miniConfigLoader('Stop'); } }); } function refreshAvailableDate() { availableDateLoader('Start'); let quantity = $('#quantity_wanted').val(); config = buildConfig(); getAvailableDate(config['config'],quantity); return false; } function getAvailableDate(config,qty) { $.ajax({ type: 'POST', url: "https://www.jpracingbike1.com/en/module/wattminiconfig/ajax", cache: false, async: true, data: { action: 'GetAvailableDate', ajax: true, config: config, quantity: qty }, success: function (result) { if (result == '--/--/----') { $('.product_date_available span').html(result); } else { $('.product_date_available span').html(result); $('.product_date_available').removeClass('toRefresh'); } availableDateLoader('Stop'); } }); } function miniConfigUpdQuantity() { console.log('miniConfigUpdQuantity'); let id_product = $('#product-details').data("product").id; let quantity = $('#quantity_wanted').val(); miniConfigLoader('Start'); config = buildConfig(); $('.product_date_available').addClass('toRefresh'); if (config['complete'] === true) { sendCustomization(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } else { sendCustomizationIncomplete(id_product, fieldMiniConfig, config['config'], config['type'], quantity); } } function miniConfigLoader(run) { if (run == 'Start') { //console.log('start'); $('.loaderDiv').show(); } if (run == 'Stop') { //console.log('stop'); $('.loaderDiv').hide(); } } function availableDateLoader(run) { if (run == 'Start') { //console.log('start'); $('.dateLoaderDiv').show(); } if (run == 'Stop') { //console.log('stop'); $('.dateLoaderDiv').hide(); } }

I want to configure :

With :

Front wheel

Back wheel

Front option

Back option

Product customization

Don't forget to save your customization to be able to add to cart

dealer locator

Sapim Spokes

Sapim is THE brand of spokes, made in Belgium since 1918.Several models of spokes are available, within the limits of compatibility with the practice and the chosen rim:

  • Sapim CX-Ray: flat spoke, very light, durable, aero and very dynamic (309g / 64 pcs / 292mm)
  • Sapim CX-Sprint: Flat spoke identical to the CX-Ray but thicker for even more rigidity (373g / 64pcs / 292mm)
  • Sapim D-Light: round spoke, light and durable, with a 1.65mm diameter central part, good value for money (344g / 64 pcs / 292mm)
  • Sapim Race: round, sturdy and rigid spoke with a 1.8mm diameter central part (408g / 64 pcs / 292mm)

Nipples

Aluminium nipples with locking thread, available in 16 colours: black, red, silver, metal grey, blue, aqua blue, gold, light gold, dark green, mint syrup green, lime green, lilac, pink, fuchsia pink, orange and oil slick.

Accessories

The wheels are delivered assembled with valves and rim tape fitted, four spare spokes and nipples and an assembly certificate.

Brand TUNE

Supplier info

DTXM521-TUNEIS

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (11)

Fast delivery and careful

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (12)

International delivery

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (13)

Delivery by Chronopost

Wheel(s) DT SWISS XM 521 27"5 / TUNE IS (14)

Secure payment

Top Articles

You might also like

Latest Posts

Article information

Author: Sen. Emmett Berge

Last Updated: 11/24/2022

Views: 6286

Rating: 5 / 5 (80 voted)

Reviews: 87% of readers found this page helpful

Author information

Name: Sen. Emmett Berge

Birthday: 1993-06-17

Address: 787 Elvis Divide, Port Brice, OH 24507-6802

Phone: +9779049645255

Job: Senior Healthcare Specialist

Hobby: Cycling, Model building, Kitesurfing, Origami, Lapidary, Dance, Basketball

Introduction: My name is Sen. Emmett Berge, I am a funny, vast, charming, courageous, enthusiastic, jolly, famous person who loves writing and wants to share my knowledge and understanding with you.