1

我有一个grid. data当我选择 arow并点击 上的“编辑”buttontbar,我想查看 a window(包括 a form)以及来自selected row. 小提琴:https ://fiddle.sencha.com/#fiddle/ukp

但我不知道如何访问当前selected row或如何data从一个传递controller到另一个(GridController--> WindowController)。

提前致谢!

4

2 回答 2

4

虽然这个问题得到了回答,但我认为它可以通过两种方式以不同的方式(和更清洁)来完成。

首先是 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选择的内容,无论它发生了什么变化或在哪里发生了变化。这可以通过bindwith来完成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);
        }
    }
}
于 2015-09-29T20:20:56.983 回答
3

您可以将记录传递到窗口视图。
在 Extjs 6 中,您可以使用viewModelbind字段,例如:

// 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

于 2015-09-29T14:03:09.130 回答