Когда вы вызываете rollback()
для ItemViewModel
, он откатится к данным, найденным в базовом item
, или к пустым значениям, если вы никогда не поддерживали свой ItemViewModel
с элементом.
В вашем случае это означает, что вам необходимо присвоить Customer
свойству item
вашего CustomerModel
.После того, как вы это сделаете, вы можете позвонить rollback()
, и CustomerModel
покажет состояние из Customer
, которое он поддерживает.
Если вы получите то же состояние при повторном открытии мастера, это означает, чточто вы снова открыли тот же экземпляр мастера.Мастер расширяет View
, что делает его одиночным в пределах его области, поэтому, если вы просто вызовете find()
, чтобы найти мастера без указания области, вторая попытка даст вам тот же экземпляр, что и первая.
Вы не опубликовали свой код инициализации Мастера, но обычно вам следует создать новую область действия для Мастера, если вы хотите избежать этого.Если вы хотите, чтобы мастер отредактировал конкретный экземпляр клиента, вы должны сделать:
val model = CustomermerModel()
model.item = myCustomer
find<CustomerWizard>(Scope(model).openModal()
По этой причине нормально позволить модели представления принимать экземпляр в конструкторе, который вы передаете *Конструктор 1022 *, так что элемент назначается автоматически:
class CustomerModel(customer: Customer? = null) : ItemViewModel<Customer>(customer)
Не то чтобы я разрешил использовать конструктор без аргументов для CustomerModel, чтобы поддерживать инъекцию в тех случаях, когда в CustomerModel нетсфера уже.В этом случае будет создан новый CustomerModel (не поддерживающий элемент клиента), поэтому в этой ситуации требуется конструктор без аргументов.
После этого код инициализации мастера становится:
find<CustomerWizard>(Scope(CustomerModel(myCustomer)).openModal()
Надеюсь, это поможет.