2017-02-07 10 views
0

У меня есть элемент в моем представлении в Aurelia, который не обновляется, когда объект из его Viewmodel обновляется. Я видел документацию о агрегаторах Pub ​​/ Sub и Event Aggregators, однако это кажется немного тяжелым для того, что я хочу сделать, поскольку я не пытаюсь общаться между двумя разными ресурсами, а скорее просто в View и его Viewmodel ,Строка Интерполяция не обновляется после изменения объекта в Viewmodel в Aurelia

Когда в объекте Viewmodel происходит изменение объекта, я не знаю, как правильно обновить (или вызвать обновление) интерполяцию строк в представлении.

Мой код выглядит следующим образом

myview.html

<h1>My List</h1> 
<ul> 
    <li repeat.for="group of modelObject.groups"> 
     <span>${group.id}</span> 
     <span repeat.for="state of group.region">${state}</span> 
    </li> 
<ul> 
<button click.delegate(editModelObject())>Edit</button> 

myviewmodel.js

constructor() 
{ 
    this.modelObject = { 
     <other stuff>, 
     "groups": [ 
      { 
       "id": "default", 
       "regions" : ["NY", "CT", "NJ"] 
      }, 
      { 
       "id": "west", 
       "regions" : ["CA", "OR"] 
      } 
     ], 
     <more stuff> 
    } 
} 

editModelObject() { 
    <something that updates both the id and regions of a group in this.modelObject> 
} 

По какой-то причине состояния правильно меняется в представлении, но идентификаторы - нет. Нужно ли мне использовать что-то вроде Pub/Sub для правильной работы двухсторонней привязки? Или есть простая вещь, которую я пропускаю или делаю неправильно?

ответ

1

Это работает, если вы изменили свойство одного из объектов массива. Но это не сработает, если вы присвоите один из индексов массива, потому что это потребует грязной проверки. См. https://github.com/aurelia/binding/issues/64

Чтобы решить вашу проблему, вы должны использовать splice() вместо индексированного назначения. Например:

const newItem = { id: 77, name: 'Test 77', obj: { name: 'Sub Name 77' } }; 
//instead of this.model.items[0] = newItem; use below 
this.model.items.splice(0, 1, newItem); 

Запуск примера https://gist.run/?id=087bc928de6532784eaf834eb918cffa

 Смежные вопросы

  • Нет связанных вопросов^_^