Обнаружение изменений в массивах с 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]
}

Запустит обновление

Другие вопросы по тегам