【问题标题】:Does Ext.view.View support the autoScroll config option?Ext.view.View 是否支持 autoScroll 配置选项?
【发布时间】:2013-04-05 17:55:19
【问题描述】:

我无法将滚动条添加到我使用 Ext 显示的两个视图中。每个视图都是基础视图的扩展,基础视图有autoScroll: true。我已验证元素已正确分配overflow: auto 属性。

我进行了一些搜索,发现 this question 并在应用它的解决方案后(即使我没有使用这个 'vbox' 布局)它并没有解决我的问题。

这是基本视图:

Ext.define('Our.extensions.baseList', {
    extend: 'Ext.view.View',
    itemSelector: 'div.postContainer',
    autoScroll: true,

    initComponent: function(){
        this.tpl = new Ext.XTemplate(           
            '<tpl for=".">',
                '<div name="postContainer" class="postContainer">',
                    // Contains Layout for posts
                '</div>',       

            {    // can run internal functions within a template
                createButton: function(idPost){
                    // Creates layout for buttons and returns it
                }
            }
        );

        this.callParent(arguments);
    }
});

两个子视图是:

Ext.define('Our.view.post.convList', {
    extend: 'Our.extensions.baseList',
    alias : 'widget.convList',  
    emptyText: 'No Conversation Followed',  
    title: 'Coversations',  

    initComponent: function(){      
        this.store = new Ext.create('Ext.data.Store', {
            id:'convStore',
            model: 'Our.model.Post',
            data: []
        });     

        this.callParent(arguments);
    }
});

还有:

Ext.define('Our.view.post.postList', {
    extend: 'Our.extensions.baseList',  
    alias : 'widget.postList',
    emptyText: 'No Posts',
    title: 'Posts'
});

最终,我的问题是 Ext.view.View 是否真的支持 autoScroll 配置属性(或者它只是像看起来那样忽略它),它在 Sencha 文档中列为有效的配置属性。我知道它不支持 layout 配置,因此链接问题解决方案无法正常工作。如果它确实支持它,我将如何让滚动条出现?

编辑

我在尝试提出解决方案时发现了一些事情,只要大小是硬编码的(设定的像素数),就可以在视图本身上设置大小。例如添加配置:height: 500, 或带有 height: 500px; 的 CSS 类,但通过 CSS 类的百分比大小根本不起作用——它们甚至不调整组件的大小。

第二次编辑

正如我在 cmets 中对收到的第一个答案所述,组件的大小为 1063(请注意,开发环境位于 1080x1920 监视器(纵向)上,并且 JavaScript 控制台在 Chrome 中运行可见帧的高度是1063 像素。“可见”是指postPanel 被添加到的Views。

我找到了一个临时解决方案,不幸的是我认为它不适合实际的生产版本 - 我正在使用 XTemplaterefresh 将组件的高度设置为面板的高度到postPanel 的那个(它设置的高度与它接收的高度相同),这似乎迫使它应用滚动条。我还在postPanelresize 事件中添加了一个侦听器,它触发两个Views 的refresh 事件。

添加...

到子视图:

listeners: {
    refresh: function() {
        var parent = this.up('postPanel');
        if (parent != undefined) {
            this.setSize({
                width: undefined,
                height: parent.getHeight()
            });
        }
    }
}

postPanel:

listeners: {
    resize: function() {
        var postList = this.down('postList');

        if (postList != undefined) {
            try {
                postList.fireEvent('refresh');
            } catch(e) { /* ignored */ }
        }

        var convList = this.down('convList');

        if (convList != undefined) {
            try {
                convList.fireEvent('refresh');
            } catch(e) { /* ignored */ }
        }
    }
}

我觉得这不是一个理想的解决方案的主要原因是它破坏了视图自动调整为父级宽度的一半(并在this.setSize() 事件中的this.setSize() 调用中将宽度设置为parent.getWidth() / 2根本不会改变大小,即使调整了父级的大小。除此之外,我不确定这是否会给速度较慢的计算机增加任何开销。

【问题讨论】:

    标签: extjs extjs4 autoscroll


    【解决方案1】:

    所以只要组件知道它应该适合的框的大小,autoScroll 就应该工作。如果您不想设置特定的框大小,请尝试将您的视图组件放入具有适合布局的视口中。然后视口将决定盒子的大小,您的视图应该开始在分配的空间中滚动。该原则用于所有容器——某些地方必须指定盒子的大小。视口是默认情况下计算全屏大小的神奇组件。

    【讨论】:

    • 视图被添加到被添加到页面内容部分的postPanel,我运行了一些测试——无论视图的大小是多少,除非它被硬编码,否则它总是静态的一个设定的尺寸——它打破了从分辨率到分辨率的布局流程。我尝试将它们添加到视口,但 Ext 开始抱怨 DOM 问题。
    • 如果您不打算使用视口并且想要动态调整大小,您将不得不手动执行此操作:1. 计算初始大小和 2. 监控页面调整大小(请参阅文档 @987654321 @) 。来自视口文档:“视口不提供滚动,因此视口中的子面板应在需要时使用 autoScroll 配置提供滚动。” - 这正是你想要的。
    • 已经有一个Viewport,我正在使用的面板和两个列出的视图被添加到Viewport 的子组件中,因此我不能将它们直接添加到@987654326 @。我已经阅读了文档,并尝试设置 autoScroll 属性,并且我已经验证组件实际上获得了应有的 overflow: auto; CSS 属性 - 但没有出现滚动条。我还验证了View 也设置了高度(应该触发了条形)。它没有像我说的那样工作。
    • 父组件一直到根的布局是什么?我使用 Illuminations for Developers 来解决布局问题。 Sencha 网站上的布局示例也有很大帮助。 docs.sencha.com/ext-js/4-0/#!/example/layout-browser/… 尽管您可能会看到一个错误,但更有可能的情况是您的布局组合有错误。从顶部(视口)提供集装箱船代码,以便我们可以尝试发现问题。
    【解决方案2】:

    尝试将您的每个视图放入带有layout: 'fix' 的容器中。然后视图的autoScroll: true 将在内容需要时强制滚动条。

    【讨论】:

    • 我知道这并没有反映在任何地方,但这不再是一个问题——我们早就放弃了 Ext,这是由于 4.0 版本中存在大量错误以及缺乏一个 4.1 版本将在承诺时修复它们。我确信这个问题已经被那些修复解决了(如果他们曾经来过的话),但同样,我们已经放弃了对 Ext 的使用。不过感谢您的回答!
    猜你喜欢
    • 2020-02-20
    • 1970-01-01
    • 1970-01-01
    • 2018-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多