2014-09-19 3 views
2

Случай довольно распространен, когда вы щелкаете ячейкой в ​​сетке, модальное окно с появляющейся формой, там вы делаете изменения, щелкаете кнопкой «Сохранить» и имеете сохранить в обновленной сетке. В 4-м я сделал это через loadRecord из сетки в форму, а затем использовал set-method для применения изменений в хранилище сетки. Теперь я пытаюсь сделать это с помощью MVVM-подхода и иметь некоторые stucks. Потому что, когда я устанавливаю одну и ту же виртуальную машину в сетку и форму, после уничтожения формы (кнопка «Сохранить или отменить»), виртуальная машина также уничтожает, а приложение разрушается. И поэтому мы не можем использовать один экземпляр VM в нескольких компонентах. Мы должны поместить его в контейнер, где есть сетка и форма. Все официальные примеры такого типа. И вопрос в том, что если кто-то решил эту проблему?
fiddle
answer from sencha forumextjs 5 как привязать хранилище к модальному окну и сетке

ответ

2

В дополнение к user1638582 «ы ответ, мое собственное решение, чтобы добавить выбранную запись в ViewModel формы:

var form = Ext.create('Plus.view.FormbetV',{ 
    viewModel:{ 
     data:{ 
      currentRec:this.getView().getSelectionModel().getSelection()[0] 
     } 
    } 
}); 

https://fiddle.sencha.com/#fiddle/jp6

1

Читали через this blog post, в котором MVVM example для сетки используется?

+0

Да, спасибо, но я Мне кажется, что это не чистый подход MVVM, но в сочетании с MVC, поскольку вы используете глобальный контроллер и не привязываете хранилище к сетке с помощью директивы 'bind'. Меня интересовал способ привязки данных в модальной форме и сетке через общую виртуальную машину. Поскольку согласно документам это невозможно. – leshicus

+0

Перу Эвана в вашей теме форума, два компонента не могут использовать один и тот же ViewModel. – arthurakay

4

ExtJs 5 ViewModel имеет вложенную структуру для компонентов, все под-объекты могут использовать ViewModel родителя. Таким образом, вы могли бы попытаться добавить объект окна с видом ViewController:

var form = Ext.create('Plus.view.FormbetV'); 
var window = Ext.create('Ext.Window', { 
    frame: true, 
    width: 350, 
    height: 200, 
    modal: true, 
    layout: 'fit' 
}); 
window.add(form); 
this.getView().add(window); // <--- add parent 'scope' 
window.show(); 

И не забудьте удалить этот код:

//var viewModel = Ext.getCmp('gridbet').getViewModel(); 
//this.setViewModel(viewModel); 

Это работает для меня, но в этом случае размер окна будет ограничен по размеру сетки.

+0

Мне нравится ваше решение, но кажется, что есть проблема с заголовком окна - его не видно. – leshicus

+0

Спасибо за ваше решение, интересный способ! Чтобы исправить заголовок окна, мы могли бы использовать 'height: 300' для сетки, а затем удалить формуляры для _gridbet_ ViewModel. Но в любом случае модальное окно будет сломано. – afschr

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