Extjs4中的setRenderer()方法

Extjs4中的setRenderer()方法,extjs,extjs4,Extjs,Extjs4,extjs3.3.1将方法setRenderer()设置为 /** * Sets the rendering (formatting) function for a column. */ setRenderer( Number col, Function fn ) : void 现在我在setRenderer的extjs4中找不到任何方法。那么,如何在运行时在extjs4中格式化网格列?当您创建网格时,可以在每个列上定义渲染器 Ext.create('Ext.grid.Panel',

extjs3.3.1
将方法
setRenderer()
设置为

/**
  * Sets the rendering (formatting) function for a column. 
  */
setRenderer( Number col, Function fn ) : void

现在我在
setRenderer
extjs4
中找不到任何方法。那么,如何在运行时在
extjs4

中格式化网格列?当您创建网格时,可以在每个列上定义渲染器

Ext.create('Ext.grid.Panel', {
    title: 'Grid Sample',
    store: Ext.data.StoreManager.lookup('yourStore'),
    columns: [
        {header: 'Product Description',  dataIndex: 'description'},
        {header: 'Cost', dataIndex: 'cost', renderer: nameOfRenderFunction },
    ],
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});
然后你可以在全局范围内定义你的函数

function nameOfRenderFunction(v) {
    //do something to v
    return v;
}

创建网格时,可以在每列上定义渲染器

Ext.create('Ext.grid.Panel', {
    title: 'Grid Sample',
    store: Ext.data.StoreManager.lookup('yourStore'),
    columns: [
        {header: 'Product Description',  dataIndex: 'description'},
        {header: 'Cost', dataIndex: 'cost', renderer: nameOfRenderFunction },
    ],
    height: 200,
    width: 400,
    renderTo: Ext.getBody()
});
然后你可以在全局范围内定义你的函数

function nameOfRenderFunction(v) {
    //do something to v
    return v;
}

我所做的是在事件发生后设置渲染器。启动应用程序后,我得到了实例化的组件,并在控制器的onLaunch()函数中添加了一个渲染器,如下所示:

    // An example renderer
    var myComponentsRenderer = function( value ){
        return value++;
    };

    // Get the instantiated component
    var myComponent = Ext.ComponentQuery.query( "#myComponent" )[0];

    // Attach the renderer
    Ext.override( myComponent, {
        renderer : myComponentsRenderer,
    });

我之所以喜欢这种方法,是因为我能够将渲染器函数放在控制器中,并将逻辑排除在视图之外。它帮助我更好地组织代码。

我所做的是在事件发生后设置渲染器。启动应用程序后,我得到了实例化的组件,并在控制器的onLaunch()函数中添加了一个渲染器,如下所示:

    // An example renderer
    var myComponentsRenderer = function( value ){
        return value++;
    };

    // Get the instantiated component
    var myComponent = Ext.ComponentQuery.query( "#myComponent" )[0];

    // Attach the renderer
    Ext.override( myComponent, {
        renderer : myComponentsRenderer,
    });

我之所以喜欢这种方法,是因为我能够将渲染器函数放在控制器中,并将逻辑排除在视图之外。它可以帮助我更好地组织代码。

它看起来像是在文章中提到的方法

您可以使用来交换不同的列列表(以及渲染器),但是这确实有一个主要的缺点,即您必须完全重新指定整个列

你找到更好的方法了吗?我真的不喜欢这样的事实,它迫使你把渲染器放在一个地方,它们不能被测试,不能以非静态的方式访问状态

然而,在这种情况下,治疗似乎比疾病更糟糕,因为您最终会从视图中删除非常明确的视图代码


有时,他们觉得自己并没有认真考虑这些东西的设计:(

这看起来像是顺便提到的方法

您可以使用来交换不同的列列表(以及渲染器),但是这确实有一个主要的缺点,即您必须完全重新指定整个列

你找到更好的方法了吗?我真的不喜欢这样的事实,它迫使你把渲染器放在一个无法测试的地方,也无法以非静态的方式访问状态

然而,在这种情况下,治疗似乎比疾病更糟糕,因为您最终会从视图中删除非常明确的视图代码


有时,他们觉得自己并没有认真考虑这些东西的设计:(

谢谢你的回答,但我想更改渲染后的网格列,而不破坏网格。这意味着我有两个网格,我想在第一个网格列的itemClick或cellClick上更改第二个网格列。我在Extjs中获得了重新配置网格面板的方法。重新配置(Ext.data.Store Store,Array columns):void使用新存储/列重新配置表。如果不希望更改存储或列,则可以省略它们。参数存储:Ext.data.store新存储。列:数组列配置数组返回void我在
Ext.grid.Panel
中未看到
重新配置
方法是Ext.panel.Table中的一个。我们也可以将它用于GridPanel.for,即-GridPanel.reconfigure(存储,列);谢谢您的回答,但我想更改渲染后的网格列,而不破坏网格。这意味着我有两个网格,我想在第一个网格列的itemClick或cellClick上更改第二个网格列。我在Extjs中获得了重新配置到GridPanel的方法。重新配置(Ext.data.Store Store,Array columns):void使用新存储/列重新配置表。如果不希望更改存储或列,则可以省略它们。参数存储:Ext.data.store新存储。列:数组列配置数组返回void我在
Ext.grid.Panel
中未看到
重新配置
方法是Ext.panel.Table中的一个。我们也可以将其用于GridPanel.for,即-GridPanel.reconfigure(store,columns);我有疑问,如果你有聊天权限,我有疑问,如果你有聊天权限