Cómo forzar la reevaluación o el renderizado vinculante en Aurelia

Estoy comenzando con una aplicación TODO simple con Aurelia, RethinkDB y Socket.IO. Parece que tengo problemas para volver a representar o reevaluar un objeto que se cambia a través de Socket.IO. Básicamente, todo funciona bien en el primer navegador, pero no se vuelve a representar en el segundo navegador, mientras que mostrar el objeto en la consola muestra diferencias en mi objeto. El problema es solo al actualizar un objeto, funciona perfectamente en la creación / eliminación de objetos de la matriz de elementos de tareas pendientes.

HTML

<ul>
    <li repeat.for="item of items">
      <div show.bind="!item.isEditing">
        <input type="checkbox" checked.two-way="item.completed" click.delegate="toggleComplete(item)" />
        <label class="${item.completed ? 'done': ''} ${item.archived ? 'archived' : ''}" click.delegate="$parent.editBegin(item)">
          ${item.title}
        </label>
        <a href="#" click.delegate="$parent.deleteItem(item, $event)"><i class="glyphicon glyphicon-trash"></i></a>
      </div>
      <div show.bind="item.isEditing">
        <form submit.delegate="$parent.editEnd(item)">
          <input type="text" value.bind="item.title" blur.delegate="$parent.editEnd(item)" />
        </form>
      </div>
    </li>
  </ul>

NodeJS con RethinkDB changefeeds

// attach a RethinkDB changefeeds to watch any changes
r.table(config.table)
    .changes()
    .run()
    .then(function(cursor) {
        //cursor.each(console.log);
      cursor.each(function(err, item) {
        if (!!item && !!item.new_val && item.old_val == null) {
          io.sockets.emit("todo_create", item.new_val);
        }else if (!!item && !!item.new_val && !!item.old_val) {
          io.sockets.emit("todo_update", item.new_val);
        }else if(!!item && item.new_val == null && !!item.old_val) {
          io.sockets.emit("todo_delete", item.old_val);
        }
      });
    })
    .error(function(err){
        console.log("Changefeeds Failure: ", err);
    });

Código de Aurelia viendo Socket.on

// update item
socket.on("todo_update", data => {
  let pos = arrayFindObjectIndex(this.items, 'id', data.id);
  if(pos >= 0) {
    console.log('before update');
    console.log(this.items[pos]);
    this.items[pos] = data;
    this.items[pos].title = this.items[pos].title + ' [updated]';
    console.log('after update');
    console.log(this.items[pos]);
  }
});

// create item, only add the item if we don't have it already in the items list to avoid dupes
socket.on("todo_create", data => {
  if (!_.some(this.items, function (p) {
    return p.id === data.id;
  })) {
    this.items.unshift(data);
  }
});

// delete item, only delete item if found in items list
socket.on("todo_delete", data => {
  let pos = arrayFindObjectIndex(this.items, 'id', data.id);
  if(pos >= 0) {
    this.items.splice(pos, 1);
  }
});

lossocket.on("todo_update", ...){} no está haciendo que el segundo navegador se vuelva a representar, pero mostrar el objeto en la consola antes / después de la actualización muestra diferencias en el objeto en sí. Incluso cambié la propiedad del título de todo y eso tampoco se vuelve a representar.

¿Cómo puedo hacer que Aurelia vuelva a renderizar en mi segundo navegador con las nuevas propiedades del objeto? No seas demasiado duro conmigo, estoy aprendiendo Aurelia / RethinkDB / NodeJS / Socket.IO todo el tiempo ...

Respuestas a la pregunta(1)

Su respuesta a la pregunta