🍇Giant grape tree seeds: thin-rooted,large and seedless🌿

$19.99 $26.99 Save $7.00
/** * 优惠码组件模型类 * 处理优惠码的显示和交互逻辑 */ class SpzCustomDiscountCodeModel extends SPZ.BaseElement { constructor(element) { super(element); // 复制按钮和内容的类名 this.copyBtnClass = "discount_code_btn" this.copyClass = "discount_code_value" } isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } buildCallback() { // 初始化服务 this.action_ = SPZServices.actionServiceForDoc(this.element); this.templates_ = SPZServices.templatesForDoc(this.element); this.xhr_ = SPZServices.xhrFor(this.win); } /** * 渲染优惠码组件 * @param {Object} data - 渲染数据 */ doRender_(data) { return this.templates_ .findAndRenderTemplate(this.element, Object.assign(this.getDefaultData(), data) ) .then((el) => { this.clearDom(); this.element.appendChild(el); // 绑定复制代码功能 this.copyCode(el, data); }); } /** * 获取渲染模板 * @param {Object} data - 渲染数据 */ getRenderTemplate(data) { const renderData = Object.assign(this.getDefaultData(), data); return this.templates_ .findAndRenderTemplate(this.element, renderData) .then((el) => { this.clearDom(); return el; }); } /** * 清除DOM内容 */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * 获取默认数据 * @returns {Object} 默认数据对象 */ getDefaultData() { return { isMobile: appDiscountUtils.judgeMobile(), isRTL: appDiscountUtils.judgeRTL(), image_domain: this.win.SHOPLAZZA.image_domain, copyBtnClass: this.copyBtnClass, copyClass: this.copyClass } } /** * 复制优惠码功能 * @param {Element} el - 当前元素 */ copyCode(el) { const copyBtnList = el.querySelectorAll(`.${this.copyBtnClass}`); if (copyBtnList.length > 0) { copyBtnList.forEach(item => { item.onclick = async () => { // 确保获取正确的元素和内容 const codeElement = item.querySelector(`.${this.copyClass}`); if (!codeElement) return; // 获取纯文本内容 const textToCopy = codeElement.innerText.trim(); // 尝试使用现代API,如果失败则使用备用方案 try { if (navigator.clipboard && navigator.clipboard.writeText) { await navigator.clipboard.writeText(textToCopy); } else { throw new Error('Clipboard API not available'); } // 显示复制成功提示 this.showCopySuccessToast(textToCopy, el); } catch (err) { console.error('Modern clipboard API failed, trying fallback...', err); // 使用备用复制方案 this.fallbackCopy(textToCopy, el); } const discountId = item.dataset["discountId"]; // 跳转决策: is_redirection + link(可选覆盖) const setting = { is_redirection: item.dataset["redirection"] === "true", link: item.dataset["link"], }; const landingUrl = `/promotions/discount-default/${discountId}`; const finalUrl = appDiscountUtils.resolveDiscountHref(setting, landingUrl); if (finalUrl && appDiscountUtils.inProductBody(this.element)) { this.win.open(finalUrl, '_blank', 'noopener'); } } }) } } /** * 使用 execCommand 的复制方案 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ fallbackCopy(codeText, el) { const textarea = this.win.document.createElement('textarea'); textarea.value = codeText; // 设置样式使文本框不可见 textarea.style.position = 'fixed'; textarea.style.left = '-9999px'; textarea.style.top = '0'; // 添加 readonly 属性防止移动端虚拟键盘弹出 textarea.setAttribute('readonly', 'readonly'); this.win.document.body.appendChild(textarea); textarea.focus(); textarea.select(); try { this.win.document.execCommand('copy'); // 显示复制成功提示 this.showCopySuccessToast(codeText, el); } catch (err) { console.error('Copy failed:', err); } this.win.document.body.removeChild(textarea); } /** * 创建 Toast 元素 * @returns {Element} 创建的 Toast 元素 */ createToastEl_() { const toast = document.createElement('ljs-toast'); toast.setAttribute('layout', 'nodisplay'); toast.setAttribute('hidden', ''); toast.setAttribute('id', 'discount-code-toast'); toast.style.zIndex = '1051'; return toast; } /** * 挂载 Toast 元素到 body * @returns {Element} 挂载的 Toast 元素 */ mountToastToBody_() { const existingToast = this.win.document.getElementById('discount-code-toast'); if (existingToast) { return existingToast; } const toast = this.createToastEl_(); this.win.document.body.appendChild(toast); return toast; } /** * 复制成功的提醒 * @param {string} codeText - 要复制的文本 * @param {Element} el - 当前元素 */ showCopySuccessToast(codeText, el) { const $toast = this.mountToastToBody_(); SPZ.whenApiDefined($toast).then(toast => { toast.showToast("Discount code copied !"); this.codeCopyInSessionStorage(codeText); }); } /** * 复制优惠码成功后要存一份到本地存储中,购物车使用 * @param {string} codeText - 要复制的文本 */ codeCopyInSessionStorage(codeText) { try { sessionStorage.setItem('other-copied-coupon', codeText); } catch (error) { console.error(error) } } } // 注册自定义元素 SPZ.defineElement('spz-custom-discount-code-model', SpzCustomDiscountCodeModel);
/** * Custom discount code component that handles displaying and managing discount codes * @extends {SPZ.BaseElement} */ class SpzCustomDiscountCode extends SPZ.BaseElement { constructor(element) { super(element); // API endpoint for fetching discount codes this.getDiscountCodeApi = "\/api\/storefront\/promotion\/code\/list"; // Debounce timer for resize events this.timer = null; // Current variant ID this.variantId = "29b6e644-42fa-491d-a4d1-e7c13bb771fb"; // Store discount code data this.discountCodeData = {} } /** * Check if layout is supported * @param {string} layout - Layout type * @return {boolean} */ isLayoutSupported(layout) { return layout == SPZCore.Layout.LOGIC; } /** * Initialize component after build */ buildCallback() { this.templates_ = SPZServices.templatesForDoc(); this.viewport_ = this.getViewport(); // Bind methods to maintain context this.render = this.render.bind(this); this.resize = this.resize.bind(this); this.switchVariant = this.switchVariant.bind(this); } /** * Setup component when mounted */ mountCallback() { this.getData(); // Add event listeners this.viewport_.onResize(this.resize); this.win.document.addEventListener('dj.variantChange', this.switchVariant); } /** * Cleanup when component is unmounted */ unmountCallback() { this.viewport_.removeResize(this.resize); this.win.document.removeEventListener('dj.variantChange', this.switchVariant); // 清除定时器 if (this.timer) { clearTimeout(this.timer); this.timer = null; } } /** * Handle resize events with debouncing */ resize() { if (this.timer) { clearTimeout(this.timer) this.timer = null; } this.timer = setTimeout(() => { if (appDiscountUtils.inProductBody(this.element)) { this.render(); } else { this.renderSkeleton(); } }, 200); } /** * Handle variant changes * @param {Event} event - Variant change event */ switchVariant(event) { const variant = event.detail.selected; if (variant.product_id == 'bd134b1a-aabe-434a-9fec-88fa8c6abc67' && variant.id != this.variantId) { this.variantId = variant.id; this.getData(); } } /** * Fetch discount code data from API */ getData() { if (appDiscountUtils.inProductBody(this.element)) { const reqBody = { product_id: "bd134b1a-aabe-434a-9fec-88fa8c6abc67", variant_id: this.variantId, product_type: "default", } if (!reqBody.product_id || !reqBody.variant_id) return; this.discountCodeData = {}; this.win.fetch(this.getDiscountCodeApi, { method: "POST", body: JSON.stringify(reqBody), headers: { "Content-Type": "application/json" } }).then(async (response) => { if (response.ok) { let data = await response.json(); if (data.list && data.list.length > 0) { data.list[0].product_setting.template_config = JSON.parse(data.list[0].product_setting.template_config); // Format timestamps to local timezone const zone = this.win.SHOPLAZZA.shop.time_zone; data.list = data.list.map(item => { if(+item.ends_at !== -1) { item.ends_at = appDiscountUtils.convertTimestampToFormat(+item.ends_at, zone); } item.starts_at = appDiscountUtils.convertTimestampToFormat(+item.starts_at, zone); return item; }); } this.discountCodeData = data; this.render(); } else { this.clearDom(); } }).catch(err => { console.error("discount_code", err) this.clearDom(); }); } else { this.renderSkeleton(); } } /** * Clear component DOM except template */ clearDom() { const children = this.element.querySelector('*:not(template)'); children && SPZCore.Dom.removeElement(children); } /** * Render discount codes with formatted dates */ render() { // Render using discount code model SPZ.whenApiDefined(document.querySelector('#spz_custom_discount_code_model')).then(renderApi => { renderApi.doRender_({ discountCodeData: this.discountCodeData }) }).catch(err => { this.clearDom(); }) } renderSkeleton() { // Render template for non-product pages this.templates_ .findAndRenderTemplate(this.element, { isMobile: appDiscountUtils.judgeMobile() }) .then((el) => { this.clearDom(); this.element.appendChild(el); }) .catch(err => { this.clearDom(); }); } } // Register custom element SPZ.defineElement('spz-custom-discount-code', SpzCustomDiscountCode);
Please Select Quantity:  100 seeds
Quantity
Share the love
Free worldwide shipping
Free returns
Sustainably made
Secure payments
Description

Description

We are committed to providing our customers with only high-quality and affordable seeds.! 🌱
✨99.6% of customers purchase 200 or more seeds,  so they can share them with their loved ones and friends!
Because when something is so easy to grow and delicious, it's hard not to share it! 😍


🍇 Grow sweet, seedless grapes with ease – no trellis or support needed! 🌿

Imagine your own vine producing large, juicy seedless grapes—perfect for a light snack, fresh juice, or even homemade wine! 🍷 Our giant grape tree seeds make this dream a reality, and all without complicated supports or pergolas!


Why are these seeds revolutionary? 🌿🍇

🌟 Thin skin, large berries: Enjoy the luxurious experience of thin-skinned, large, juicy berries. Perfect for grape lovers who want incredible flavor in every bite.

🍇 Seedless, more enjoyment: No seeds, no hassle! These grapes are ideal for children, baking, or simply as a healthy snack that requires no extra effort.

🚫 No need for a pergola or support: Unlike other varieties, our giant grapevines grow strong and tall without the need for pergolas or supports – making your life easier with minimal maintenance!

🌱 Versatile planting: Whether you have a small pot on your balcony or a large garden plot, these plants will adapt and grow in all conditions.

🍇 Annual harvest: Plant once and enjoy a fruitful harvest of sweet seedless grapes every year. This is a long-term investment in your garden that will delight you throughout all seasons!

✨ Nutritional value of giant grapes:

🛡️ Rich in antioxidants: Packed with antioxidants such as resveratrol, which helps protect cells and maintain your overall health.

💪 High in vitamins: These grapes are a great source of vitamin C, which boosts the immune system and contributes to healthy skin.

❤️ Good for the heart: Natural compounds in grapes, such as flavonoids, help improve blood circulation and reduce inflammation, supporting cardiovascular health.

💧 Hydrating and refreshing: With a high water content, these grapes are perfect for staying hydrated and refreshed on hot days.

🔥 Low in calories: Enjoy sweet but low-calorie fruits that are ideal for weight control and a guilt-free healthy snack.


Easy guide to planting giant grapes:

🌞 1. Choose a location: Find a sunny spot – either plant in a spacious pot or directly in the garden soil.

🌱 2. Prepare the soil: Use nutrient-rich, well-drained soil. If planting in a pot, ensure good drainage.

🌾 3. Sow the seeds: Plant the seeds about 1.25 cm deep. No need for spacing or complicated arrangements – just plant and let nature do its work!

💧 4. Watering: Keep the soil moist but not soggy. These vines are hardy and require minimal maintenance once established.

🌿 5. Watch them grow: With no need for trellises or supports, these vines will grow strong and healthy, producing delicious seedless grapes.

🍇 6. Harvest and enjoy: Pick your own sweet, juicy grapes and enjoy a delicious, home-grown harvest.


Why choose our giant grape tree seeds? 🌱🍇

🌿 Easy gardening: Forget about trellises and supports! These vines grow perfectly with minimal care—ideal for new gardeners and those looking for convenience.

🍇 Exceptional taste: Thin-skinned, large, and seedless – these grapes are incredibly delicious, perfect for every member of the family!

🏡 Space-saving: Suitable for pots or small gardens. Whether you grow indoors or outdoors, these vines will adapt and meet your needs.

🌟 Annual abundance: Enjoy a fresh harvest of sweet, seedless grapes every year – with just one planting! It's a rewarding experience that keeps on giving.


Start growing your own seedless grapes today! 🍇🌱

Don't miss the chance to add these easy-to-grow, high-yield vine seeds to your garden! With minimal effort and delicious fruit, these seeds will become your favorite addition to the garden.

✅ Low maintenance – Easy to grow, with minimal care!
✅ Delicious and seedless fruit – Enjoy sweet seedless grapes, perfect for breakfast, juice, or wine.

🌟 Order now and enjoy home-grown, seedless grapes for years to come! 🍇✨


Frequently asked questions

Question: Where do these seedless grape seeds come from? How is it possible to sell seeds if the grapes are seedless?

Answer: That's a great question! The seeds we sell come from specially developed varieties created using traditional breeding methods. These seeds grow vines that, when they bear fruit, will have seedless grapes.

How does this work?
Seedless grapes are usually obtained by crossing different varieties of vines, resulting in a hybrid with very small, underdeveloped seeds—almost imperceptible when consumed. To grow a vine that produces seedless grapes, you start with seeds that carry the genetic characteristics for this.

Our seeds come from carefully selected plants that have proven themselves in the production of high-quality seedless grapes. When you plant these seeds, the vines will grow and produce seedless grapes – just what you are looking for!

Don't wait! Order now and start growing your seedless grapes today! 🍇🌱