Я хочу отредактировать / сохранить свойства позиции Shopify непосредственно в корзине, используя /cart/change.js
, не возвращаясь на страницу продукта, чтобы повторно ввести информацию снова. Свойства позиции состоят из имен / значений.
Каждый элемент корзины будет иметь максимум 3 имени свойства элемента строки («Случай», «Дополнительные комментарии», «Закрытая карта»), причем каждое из соответствующих значений будет уникальным.
См. Этот снимок экрана как пример
Я не могу заставить его работать с несколькими элементами корзины или с более чем одним именем / значением свойства. Поскольку каждый идентификатор значения свойства является самим значением свойства, я попытался создать динамические идентификаторы для каждого значения, чтобы я мог нацеливаться на каждое свойство элемента корзины и перезаписывать существующие значения. Тем не менее, я не могу понять, как это сделать.
Например, для редактирования property-name
я хотел бы сделать что-то вроде этого:
$('.cart-line-item-update').on('click', function() {
const $this = $(this);
const dataIndex = $this.data('index');
const item = cart_items[dataIndex - 1];
item.properties['property-name'] = $('#dynamic-property-value').val();
jQuery.ajax({
url: '/cart/change.js',
dataType: 'json',
data: {
line: dataIndex,
properties: item.properties
}
}).done(function() {
window.location.reload()
})
});
<script>
var cart_items = {{cart.items | json}}
</script>
{% if property_size > 0 %}
{% assign loop_index = forloop.index %}
{% for p in item.properties %}
{% assign first_character_in_key = p.first | truncate: 1, '' %}
{% unless p.last == blank or first_character_in_key == '_' %}
<div class="accordion-container collapse-all cart-line-item-accordion">
<input type="checkbox" title="Expand for more information" checked>
<h2 class="accordion-title">
<span id="{{ item.product_id }}-{{ p.first | handleize }}">{{ p.first }}:</span>
<i class="accordion-icon"></i>
</h2>
<div class="accordion-content">
<div class="saved-textarea visible">
{{ p.last }}
</div>
<textarea id="{{ item.product_id }}-{{ p.first | handleize }}-textarea" class="update-textarea autosize new-property">{{ p.last }}</textarea>
<div class="cart-line-item-btns">
<a class="cart-item-remove cart-line-item-edit" title="Edit content">Edit</a>
<a class="cart-item-remove cart-line-item-update" title="Save changes" data-index="{{loop_index}}">Update</a>
</div>
</div>
</div>
{% endunless %}
{% endfor %}
{% endif %}
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:
Каждое значение свойства элемента корзины будет сохранено (перезаписать существующее значение json).
АКТУАЛЬНЫЙ РЕЗУЛЬТАТ:
Обновит только значение свойства первого элемента корзины и сохранит его. Если в корзине есть несколько элементов, каждый со своим значением, он не сохранит последующие экземпляры этого свойства и переопределит их с первым экземпляром.
Значения уже существуют в json, поскольку они создаются на странице продукта и переносятся в корзину. Я просто не знаю, как нацелить каждое старое значение json, чтобы переопределить его новым. Этот сценарий, кажется, нацелен на все экземпляры имени свойства и переопределяет их все первым значением.
Может быть, я упускаю что-то очевидное. Может кто-нибудь, пожалуйста, помогите?