我有一个grid
. data
当我选择 arow
并点击 上的“编辑”button
时tbar
,我想查看 a window
(包括 a form
)以及来自selected row
. 小提琴:https ://fiddle.sencha.com/#fiddle/ukp
但我不知道如何访问当前selected row
或如何data
从一个传递controller
到另一个(GridController
--> WindowController
)。
提前致谢!
我有一个grid
. data
当我选择 arow
并点击 上的“编辑”button
时tbar
,我想查看 a window
(包括 a form
)以及来自selected row
. 小提琴:https ://fiddle.sencha.com/#fiddle/ukp
但我不知道如何访问当前selected row
或如何data
从一个传递controller
到另一个(GridController
--> WindowController
)。
提前致谢!
虽然这个问题得到了回答,但我认为它可以通过两种方式以不同的方式(和更清洁)来完成。
首先是 CD 使用的方式,这是一个很好的答案,但更干净,在您的controller
. 让viewmodel
他做他的工作:
bind
将属性配置到selection
您的grid
:
bind: {
selection: '{rec}'
},
字段保持不变:
items: [{
xtype: 'textfield',
fieldLabel: 'Firstname',
bind: '{rec.firstName}'
}, {
xtype: 'textfield',
fieldLabel: 'Lastname',
bind: '{rec.lastName}'
}]
而已。现在您可以删除窗口中的逻辑controller
。
工作示例:https ://fiddle.sencha.com/#fiddle/ulf
第二种方式,我经常使用,deep binding
在你的viewmodel
. 这是为了跟踪record
选择的内容,无论它发生了什么变化或在哪里发生了变化。这可以通过bind
with来完成deep: true
。
在您的(单独)viewmodel
放置一个formula
:
formulas: {
rec: {
// We need to bind deep to be notified on each model change
bind: {
bindTo: '{myGrid.selection}', //--> reference configurated on the grid view (reference: myGrid)
deep: true
},
get: function(record) {
return record;
},
set: function(record) {
if(!record.isModel) {
record = this.get('records').getById(record);
}
this.set('currentRecord', record);
}
}
}
您可以将记录传递到窗口视图。
在 Extjs 6 中,您可以使用viewModel
和bind
字段,例如:
// In The controller
var selectionModel = grid.getSelectionModel();
Ext.create({
xtype: 'my-window',
viewModel: {
data: {
rec: selectionModel.getSelection()[0]
}
}
});
// The window
items: [{
xtype: 'textfield',
fieldLabel: 'Firstname',
bind: '{rec.firstName}'
}, {
xtype: 'textfield',
fieldLabel: 'Lastname',
bind: '{rec.lastName}'
}]
基于您的代码的工作示例:https ://fiddle.sencha.com/#fiddle/ukr