我遇到了Ext.namespace()
我正在进行的项目.
我查看了Sencha的网站,解释不是很有帮助.
这就是他们所说的:
创建用于作用域变量和类的名称空间,以使它们不是全局的.指定命名空间的最后一个节点会隐式创建所有其他节点.
Ext.namespace('Company', 'Company.data');
Run Code Online (Sandbox Code Playgroud)
他们还提到这Ext.ns('Company.data')
是更可取的.
如果这个问题看似简单或愚蠢,我道歉,但我真的想完全理解这个概念.提前致谢
这对我来说不是很清楚:
Ext.namespace('Company', 'Company.data')
在我的JS页面的顶部,这是否意味着它携带所有其他函数名称和变量(如全局范围)?Ext.namespace('Company', 'Company.data')
什么?Ext.ns('Company.data')
没有像'公司'那样Ext.namespace
?Specifying the last node of a namespace implicitly creates all other nodes
?我是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) 谁能告诉我initComponent
extjs4.1 中该函数的用途是什么?请举个例子
谢谢
我必须从我的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是不是有问题?
谢谢
我在ExtJs中有一个自定义组件,它是一个表单字段(GridField).它将网格显示为表单字段并按预期工作.观察结果如下:
单独呈现表单时(例如,在窗口或卡片布局中的第一个面板中,一切都显示正常)
如果表单不是卡片布局中的第一个面板,或者在第一次呈现时隐藏,则显示字段名称并保留所需的空间但控件不显示.
我做了一些检查,发现实际渲染了自定义组件,但所有html元素(div等)的宽度都是0.它们都有样式(宽度:0).我的猜测是因为表单面板在渲染完成时不可见.
在控制的实施方面,我正在扩展Ext.form.field.Base
.在initComponent
,我只是调用this.on('afterrender', this.initControl)
渲染后运行附加控件的自定义代码.这里input
隐藏了字段,网格呈现在它应该的位置.
我的问题是1.如何强制控件重新渲染,使宽度不再为0?2.如果当前实现错误,使用网格或其他ext组件作为表单字段的正确方法是什么?
我是Sencha ExtJs的新手
我不明白这条线Ext.getCmp('component_id').getEl().hide();
.有什么用.getEl()
?我可以Ext.getCmp('component_id').hide();
直接写吗?
并解释我关于.el的事Ext.get()
.
我正在尝试将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) 在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)
另外,我究竟会把听众放在哪里?我想我在我的例子中没有得到那个正确的吗? …
脚本
我想更新具有静态数据存储的网格中特定记录的列数据.这是我的商店:
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) 背景:我们的应用程序总是作为一个整体打包,但通过用户访问一些服务器端操作可能会受到限制.我们知道应用程序启动时允许的操作.我们现在想要隐藏他无法访问的用户的所有视图(面板,按钮等).
为此,我们编写了一个可以应用于任何组件的插件.但问题出现了:
以下是我们尝试针对插件主机运行的内容:
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:true
和disabled: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 ×10
extjs4.2 ×10
javascript ×4
extjs4 ×3
extjs4.1 ×2
ajax ×1
closures ×1
controller ×1
gridpanel ×1
namespaces ×1
themes ×1