小编JJR*_*JJR的帖子

在构造时防止组件的渲染(隐藏和/或禁用)

背景:我们的应用程序总是作为一个整体打包,但通过用户访问一些服务器端操作可能会受到限制.我们知道应用程序启动时允许的操作.我们现在想要隐藏他无法访问的用户的所有视图(面板,按钮等).

为此,我们编写了一个可以应用于任何组件的插件.但问题出现了:

以下是我们尝试针对插件主机运行的内容:

if (cmp['setVisible']) cmp.setVisible(false); else cmp.hidden = true;
if (cmp['disable']) cmp.disable(); else cmp.disabled = true;
cmp.on('beforerender', function() { return false; })
Run Code Online (Sandbox Code Playgroud)

首先我们认为越早越好.所以我们试图在插件的构建时运行它.但这是不可能的,因为(主机)的监听器似乎尚未准备好(组件试图触发隐藏事件).所以我们将它移动到init插件的方法中,该方法不会引发错误但只是部分工作.只有beforerender事件真正应用但它只中止了孩子的渲染.所以我们最终得到了一个破碎的组件(边框在那里而内容没有).如果我们评论了活动注册,主持人保持不变.我们还测试了仅使用hidden:truedisabled:true没有运气的使用.

那么我们如何才能以正确的方式阻止组件的渲染呢?

编辑:

该组件应标记为已禁用和隐藏,因为我们无法阻止组件的创建.我从我的同事那里得到的剪辑是错的,所以工作的召唤setVisible(false),我们disable()也猜.但是组件得到了平滑的渲染,我们似乎无法否定这一点而不会得到一半的渲染组件.

回答@AlexTokarev

我尝试过@AlexTokarev建议的内容.为此,我将以下行添加到Plugin-Constructor中

cmp.hidden = true;
cmp.autoShow = false; // I know this may do nothing for non floating but I added it anyway
cmp.autoRender = true;
Run Code Online (Sandbox Code Playgroud)

根据调试我知道设置很早就会应用(在Ext.AbstractComponent.constructor中),但我仍然以隐藏和渲染的组件结束.

在此输入图像描述

@sbgoran的评论

在一个Testcase中,我们使用列布局,其中所有容器都从同一个类扩展.一旦我将我们的插件(将beforerender事件返回false配置)添加到其中一个扩展容器(插件直接添加到类定义(作为ptype)),此列中的所有容器看起来都已损坏(仅渲染边框并且内容是左上角的一个小灰框.)因此,当只有一个子项取消渲染时,中止渲染会影响列的所有子项.

**示例代码**

首先,我想要注意的是,我们正在寻找一种方法来实现这一点,因为我们知道ExtJS中的渲染是一回事.我可以要求设置一个演示,但我认为这不会那么容易,因为我们使用的Ext.app.portal.Panel是失败的例子.但该插件应该适用于任何类型的组件.首先,我将添加一些演示代码:

我们有一个视图放置在具有边框布局的Viwport中 …

extjs extjs4.2

9
推荐指数
1
解决办法
1万
查看次数

在没有回调的情况下将其分配给区域设置变量的原因是什么?

据我所知this,在回调中使用赋值变量,其中this范围可能会发生变化.但是通过ExtJS源我发现它在各种函数中使用但并非总是如此.那么我是否有任何理由将其分配this给范围下的局部变量,或者ExtJS源是否正在与不同的开发人员风格进行斗争?

extjs extjs4 extjs4.2

6
推荐指数
1
解决办法
82
查看次数

在图例中显示不同的文字

这是关于版本4.2.2我们有这样的图表

var store = Ext.create('Ext.data.JsonStore', {
    fields: ['name', 'data'],
    data: [
        { 'name': 'metric one',   'data':10 },
        { 'name': 'metric two',  'data':27 }
    ]
});

Ext.create('Ext.chart.Chart', {
    renderTo: Ext.getBody(),
    width: 500,
    height: 300,
    animate: true,
    store: store,
    legend: {
        position: 'right'
    },
    axes: [
        {
            type: 'Numeric',
            position: 'left',
            fields: ['data'],
            label: {
                renderer: Ext.util.Format.numberRenderer('0,0')
            },
            title: 'Sample Values',
            grid: true,
            minimum: 0
        },
        {
            type: 'Category',
            position: 'bottom',
            fields: ['name'],
            title: 'Sample Metrics'
        }
    ],
    series: [
        {
            type: …
Run Code Online (Sandbox Code Playgroud)

extjs extjs4 extjs-chart

6
推荐指数
1
解决办法
7143
查看次数

将负载遮罩应用到也覆盖浮动组件的视口

如何在 Ext.applcation 的启动方法中向视口添加一个加载掩码,当显示时它也将覆盖像窗口这样的浮动组件

目前遮罩工作但不覆盖任何打开的窗口。

extjs extjs4 extjs4.2

5
推荐指数
1
解决办法
3528
查看次数

如何滚动到网格中的指定记录

我们如何滚动到网格中定义的记录(记录或索引)?

使用缓冲渲染器,通过调用以下内容非常简单:

grid.view.bufferedRenderer.scrollTo(0, false, callback, scope);
Run Code Online (Sandbox Code Playgroud)

但是如何使用默认渲染器完成此操作?

extjs extjs4 extjs4.2

3
推荐指数
1
解决办法
6235
查看次数

idParam,idProperty和clientIdProperty有什么区别

我很好奇idProperty模型中的一个实现,读者中的一个idParam实现,然后是代理和clientIdProperty模型的实现

我们如何以正确的方式使用它们?

extjs extjs4 extjs4.2

1
推荐指数
1
解决办法
649
查看次数

格式化十进制以在XML中使用并忽略文化

我们需要将十进制值插入XML文档(由XML编写器完成),该文档工作正常.首先我们使用XmlConvert.ToString(myDecimalValue)哪个打印四位数的值.现在我们被迫总是使用两位数,我们试图改变这一点,但到目前为止没有运气.

首先我们放弃了使用,XmlConvert因为我们发现没有超载允许我们格式化小数,所以我们尝试myDecimalValue.ToString("0.00")只打印两个数字,但替换了.一个,在我们的情况下无效的.

那么我们如何将十进制格式化为类似25000.00m字符串25000.00?(舍入无关紧要,因为值永远不会超过两位数)

编辑

decimal m_nAmt;
public decimal Amount
{
    get
    {
        return m_nAmt;
    }
    set
    {
        if ((value < 0M) || (value > 999999999.99M))
        {
            throw new ArgumentOutOfRangeException();
        }
        if (SepaUtil.DecimalPlaces(value) > 2)
        {
            throw new ArgumentException();
        }

        m_nAmt = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

写在哪里

// the original method
XmlConvert.ToString(m_nAmt);
Run Code Online (Sandbox Code Playgroud)

两种方法都是同一类的成员;

以下是写入Xml文件的值的示例

<InstdAmt Ccy="EUR">3360.0000</InstdAmt>
Run Code Online (Sandbox Code Playgroud)
  • 一个重要的注意事项是,这是类库的一部分,它涵盖了SEPA标准的一部分,但作者没有提供任何支持.*

编辑2

编写节点的示例.我使用立即窗口来获取ControlSumProperty(System.Decimal)的当前值和写入的值XmlConvert.结果是XmlConvert写入四个小数位,虽然我XmlConvert在LINQPad中使用十进制变量时无法确认.一个区别是这个库使用.net 2.0 …

.net c# xml

0
推荐指数
1
解决办法
2375
查看次数

标签 统计

extjs ×6

extjs4 ×5

extjs4.2 ×5

.net ×1

c# ×1

extjs-chart ×1

xml ×1