def update(value)
      # Since we're checking things like size, we don't want this to be re-triggered on a
      # size change, so we run without tracking.
      Computation.run_without_tracking do
        # Adjust to the new size
        values = current_values(value)

        @value = values

        remove_listeners

        if @value.respond_to?(:on)
          @added_listener   = @value.on('added') { |position| item_added(position) }
          @removed_listener = @value.on('removed') { |position| item_removed(position) }
        end

        templates_size = nil
        values_size = nil

        Volt.run_in_mode(:no_model_promises) do
          templates_size = @templates.size

          unless values.respond_to?(:size)
            fail InvalidObjectForEachBinding, "Each binding's require an object that responds to size and [] methods.  The binding received: #{values.inspect}"
          end

          values_size    = values.size
        end

        # Start over, re-create all nodes
        (templates_size - 1).downto(0) do |index|
          item_removed(index)
        end
        0.upto(values_size - 1) do |index|
          item_added(index)
        end
      end
    end
def update(value)
      # Since we're checking things like size, we don't want this to be re-triggered on a
      # size change, so we run without tracking.
      Computation.run_without_tracking do
        # Adjust to the new size
        values = current_values(value)

        @value = values

        remove_listeners

        if @value.respond_to?(:on)
          @added_listener   = @value.on('added') { |position| item_added(position) }
          @removed_listener = @value.on('removed') { |position| item_removed(position) }
        end

        templates_size = nil
        values_size = nil

        Volt.run_in_mode(:no_model_promises) do
          templates_size = @templates.size

          unless values.respond_to?(:size)
            fail InvalidObjectForEachBinding, "Each binding's require an object that responds to size and [] methods.  The binding received: #{values.inspect}"
          end

          values_size    = values.size
        end

        # Start over, re-create all nodes
        (templates_size - 1).downto(0) do |index|
          item_removed(index)
        end
        0.upto(values_size - 1) do |index|
          item_added(index)
        end
      end
    end
When a changed event happens, we update to the new size.