标签: extjs4.2

什么是Ext.namespace,我们应该如何使用它们?

我遇到了Ext.namespace()我正在进行的项目.
我查看了Sencha的网站,解释不是很有帮助.

这就是他们所说的:

创建用于作用域变量和类的名称空间,以使它们不是全局的.指定命名空间的最后一个节点会隐式创建所有其他节点.

Ext.namespace('Company', 'Company.data');
Run Code Online (Sandbox Code Playgroud)

他们还提到这Ext.ns('Company.data')是更可取的.

如果这个问题看似简单或愚蠢,我道歉,但我真的想完全理解这个概念.提前致谢

这对我来说不是很清楚:

  • 如果我Ext.namespace('Company', 'Company.data')在我的JS页面的顶部,这是否意味着它携带所有其他函数名称和变量(如全局范围)?
  • 究竟'Company'和'Company.data'代表Ext.namespace('Company', 'Company.data')什么?
  • 为什么新的会议Ext.ns('Company.data')没有像'公司'那样Ext.namespace
  • 这是什么意思Specifying the last node of a namespace implicitly creates all other nodes
  • 什么时候应该使用这个想法?

javascript namespaces extjs extjs4.2

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

extjs - 如何从另一个控制器或闭包中正确调用控制器方法

我是extjs的新手,我正在使用MVC架构.

当我的应用程序引用控制器的方法时,我这样做(in MyApp.Application):

Mb.app.getController('Main').myMethod();
Run Code Online (Sandbox Code Playgroud)

它已经很久了,但我认为这是可行的方法.

当一个控制器在一个闭包中调用它自己的方法时,我被引导使用这个代码(在MyApp.controller.Main:

controllerMethodOne: function(){
    Ext.Ajax.request({
        url: ...,
        params: ...,
        success: (function(response){
            list = Ext.JSON.decode(response.responseText);
            list.forEach(function(item){
                storeMenu.add(
                    Ext.create('Ext.menu.Item', {
                        text: item.text,
                        handler: function(el){MyApp.app.getController('Main').controllerMethodTwo()}
                    })
                )
            })
        })
    })
},
Run Code Online (Sandbox Code Playgroud)

我引用了方法,MyApp.app.getController('Main').controllerMethodTwo()因为this没有引用闭包中的控制器对象,因此this..controllerMethodTwo()不起作用.

我发现这完全令人费解,我希望有人有想法解决这个MyApp.app.getController问题.

更新

感谢所有的建议,我可以优化我的代码并提出:

// in my controller
    mixins: ['Mb.controller.mixin.StoreMenu'],
    // I use that style of menus in two controllers thats why I use a mixin
    init: function() {
        this.control({
            '#vg_storeMenu menuitem': {
                click: this.onStoreMenuClicked
            }
        }) …
Run Code Online (Sandbox Code Playgroud)

closures controller extjs extjs4.2

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

extjs4.1中initComponent函数的用途是什么?

谁能告诉我initComponentextjs4.1 中该函数的用途是什么?请举个例子

谢谢

extjs extjs4.1 sencha-architect extjs4.2

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

Extjs 4.2:如何在Ext.Ajax.Request POST中正确发送参数

我必须从我的ExtJs脚本中执行POST才能从我的数据库中删除一些内容:

Ext.Ajax.request({
    url: 'deleteRole.html',
    method: 'POST',          
    headers: {'Content-Type': 'text/html'},
    waitTitle: 'Connecting',
    waitMsg: 'Sending data...',                                     
    params: {
        "rolename" : rolename
    },
    scope:this,
    success: received,                                    
    failure: function(){console.log('failure');}
});
Run Code Online (Sandbox Code Playgroud)

当发送帖子时,我可以在firebug中看到字体中的rolename,但不能作为参数.我想向您展示相对于用户注册的另一篇文章(由spring:form制作).如果我检查帖子,我可以看到以下内容:

图片http://s2.subirimagenes.com/otros/previo/thump_8498731post.jpg

我可以使用@RequestParam在我的控制器中获取参数.

但在帖子中我有问题我看不到参数部分,我只能看到字体(Fuente)部分:

image2 http://s2.subirimagenes.com/otros/previo/thump_8498737delete.jpg

因此,我的弹簧控制器没有检测到任何参数.我的POST是不是有问题?

谢谢

ajax extjs extjs4 extjs4.2

11
推荐指数
3
解决办法
6万
查看次数

Extjs:强制组件重新渲染

我在ExtJs中有一个自定义组件,它是一个表单字段(GridField).它将网格显示为表单字段并按预期工作.观察结果如下:

  1. 单独呈现表单时(例如,在窗口或卡片布局中的第一个面板中,一切都显示正常)

  2. 如果表单不是卡片布局中的第一个面板,或者在第一次呈现时隐藏,则显示字段名称并保留所需的空间但控件不显示.

我做了一些检查,发现实际渲染了自定义组件,但所有html元素(div等)的宽度都是0.它们都有样式(宽度:0).我的猜测是因为表单面板在渲染完成时不可见.

在控制的实施方面,我正在扩展Ext.form.field.Base.在initComponent,我只是调用this.on('afterrender', this.initControl)渲染后运行附加控件的自定义代码.这里input隐藏了字段,网格呈现在它应该的位置.

我的问题是1.如何强制控件重新渲染,使宽度不再为0?2.如果当前实现错误,使用网格或其他ext组件作为表单字段的正确方法是什么?

javascript extjs extjs4 extjs4.2

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

你能详细解释.el,getEl(),Ext.get()吗?

我是Sencha ExtJs的新手

我不明白这条线Ext.getCmp('component_id').getEl().hide();.有什么用.getEl()?我可以Ext.getCmp('component_id').hide();直接写吗?

并解释我关于.el的事Ext.get().

javascript extjs extjs4.2

10
推荐指数
2
解决办法
2万
查看次数

ExtJs Neptune主题

我正在尝试将ExtJs 4.2中的默认主题更改为Neptune自定义主题.如何进行调试?

<html>
<head>
    <title>xxx</title>
    <link rel="shortcut icon" type="image/ico" href="favicon.ico" />
    <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-all.css">
    <link rel="stylesheet" type="text/css" href="extjs/resources/css/ext-custom.css">
    <script type="text/javascript" src="extjs/ext-all.js"></script>
    <script type="text/javascript" src="Scripts/App.js"></script>
</head>
<body></body>
</html>
Run Code Online (Sandbox Code Playgroud)

themes extjs extjs4.2

10
推荐指数
2
解决办法
2万
查看次数

在ExtJS 4中将商店加载到组合框时如何发送额外的参数?

在ExtJS 4中使用组合框存储时,如何发送额外参数?

我知道我可以在代理设置中使用"extraParams",但这会影响使用同一商店的所有元素.

即如果我有一个使用名为"用户"的商店的网格,它将列出系统中的所有用户.同时,我有一个组合框,也使用商店"用户",但这次我想列出所有"status = 2"的用户,因此我想发送参数"&status = 2" Ajax调用后端.

如果我使用类似的东西:

store.getProxy().extraParams = {
  status: 2
};
Run Code Online (Sandbox Code Playgroud)

它可以工作,但Grid会同时更新为使用"&status = 2".我只想让组合框使用参数.

我想我可以关闭Grid上的"autoupdate",然后在组合框上的"render"事件上设置"extraParams",然后在组合框被隐藏时取消设置,但这将是一个非常难看的解决方案.

我也可以将商店复制到"Users2"并将其用于组合框,但这也是一个丑陋的解决方案.

这样做的正确方法是什么?对大多数人来说,它一定是很常见的事情.

更新1:

我知道我可以使用类似的东西:

store.load({
  params:{
    'foo1': bar1,
    'foo2': bar2
  } 
});
Run Code Online (Sandbox Code Playgroud)

但是我如何在ExtJS 4 MVC中使用它呢?在那里,我只在表单对象中指定"store:Users".我如何将这些额外的参数发送到.load()函数?

我尝试过以下方法:

{
xtype: 'combobox',
fieldLabel: 'Server',
name: 'server',

//store: 'ServersIP',
store: new Cloud.store.ServersIP(),

/*
listeners: {
    beforeload: function(store, options) {
        console.log(store);
    }
},
*/

valueField: 'id',
displayField: 'name_id',
emptyText: 'Select a Server...',
editable: false
},
Run Code Online (Sandbox Code Playgroud)

但是,它会出现错误"Uncaught TypeError:无法读取未定义的属性'ServersIP'"

但名字是正确的:

Ext.define('Cloud.store.ServersIP', {

extend: 'Ext.data.Store',
model: 'Cloud.model.Server', 
Run Code Online (Sandbox Code Playgroud)

另外,我究竟会把听众放在哪里?我想我在我的例子中没有得到那个正确的吗? …

javascript extjs extjs4 extjs4.1 extjs4.2

10
推荐指数
2
解决办法
4万
查看次数

在extjs中以dyanamically更新记录中的字段

脚本

我想更新具有静态数据存储的网格中特定记录的列数据.这是我的商店:

extend : 'Ext.data.Store',
model  : 'MyModel',
autoLoad:true,
proxy: {
    type: 'ajax',
    url: 'app/data/data.json',
    reader: {
        type: 'json',
        root: 'users'
    }
},
Run Code Online (Sandbox Code Playgroud)

我的data.json

 {
     'users': [{
         QMgrStatus: "active",
         QMgrName: 'R01QN00_LQYV',
         ChannelStatus: 'active',
         ChannelName: 'LQYV.L.CLNT',
         MxConn: 50
     }]
 }
Run Code Online (Sandbox Code Playgroud)

我正在做什么来更新记录:

var grid = Ext.getCmp('MyGrid');
var store = Ext.getStore('Mystore');
store.each(function(record, idx) {
    val = record.get('ChannelName');
    if (val == "LQYV.L.CLNT") {
        record.set('ChannelStatus', 'inactive');

        record.commit();
    }
});
console.log(store);
grid.getView().refresh();
Run Code Online (Sandbox Code Playgroud)

我的问题

我在这里更新记录.它没有反映在我的网格面板中.网格使用相同的旧存储(静态).是静态数据的问题?或者我错过了什么或者出错了?请帮我解决这个问题.非常感谢.

我的编辑

我尝试根据状态对列进行颜色编码.但是,即使我正在更新商店,我总是得到status ="active".

我想在网格中做什么

{
    xtype: 'grid',
    itemId: …
Run Code Online (Sandbox Code Playgroud)

extjs gridpanel extjs4.2

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

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

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

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

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

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万
查看次数