Обнаружение изменений в массивах с RivetsJS
Я новый пользователь RivetsJS и пытаюсь выяснить, как обновить привязки при изменении элементов массива. Похоже, что Rivets способен обнаруживать изменения в не сложных переменных при использовании простых назначений (т.е. player_lives -= 1
). Он также обнаруживает, когда я push()
в связанный массив. Однако при назначении нового значения существующему элементу массива обновление не происходит. Вот пример того, что я пытаюсь:
<html>
<head>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/rivets/0.8.1/rivets.bundled.min.js"></script>
<script type="text/javascript">
var numbers = [111, 222, 333];
window.addEventListener('load', function() {
rivets.bind(document.getElementById('numbers'), {numbers: numbers});
});
function changeNum() {
numbers[0] = 5;
}
</script>
</head>
<body>
<button onclick="changeNum()">Add a number</button>
<div id="numbers">{ numbers }</div>
</body>
</html>
В этом случае { numbers }
привязка не обновляется, и исходные значения продолжают отображаться. Я подозреваю, что Rivets не в состоянии обнаружить, что изменение происходит, но я не уверен, каков наилучший подход, чтобы исправить это. Какие-либо предложения?
1 ответ
Кажется, заклепки не могут обнаружить изменения в индексах массива.
Однако он обнаруживает, когда изменяется ссылка на массив.
Таким образом, одно решение состоит в том, чтобы вызвать изменение ссылки, в вашем примере, что-то вроде
function changeNum() {
//numbers[0] = 5;
numbers = [5].concat(numbers.slice(1)); // [5, 222, 333]
}
Запустит обновление