有人可以向我解释一下Symfony2 MVC和ExtJS4 MVC项目的正确文件结构吗?(一起使用时!)
我想用不同的语言翻译我的ExtJS应用程序.我的问题是我正在使用ExtJS MVC框架,我的大多数JS文件都是由框架本身动态下载的.
理想的解决方案(我想到的)是在Ext.Loader(或我的Ext.app.Application)中有一个额外的选项来定义要使用的语言,并根据此选项自动下载这样的文件为" a.MyClass.fr.js"在加载我的"a.MyClass.js"之后(它将包含一个Ext.apply,覆盖我的字符串资源).目前可能还没有在ExtJS框架中提供.
我能看到的替代解决方案是在服务器端执行一个技巧.首先,将在客户端上创建一个cookie,以设置为该语言.在服务器端,我可以捕获对JS文件的所有请求,然后如果设置了cookie(例如='fr'),我将所请求的JS文件(MyClass.js)与其i18n的朋友(MyClass)组合在一起.fr.js)动态地在服务器上返回结果.这样可行,但它真的很棘手,因为它意味着其他事情(缓存......).
也许最好的方法是实现我在ExtJS框架中描述的第一个行为......
你怎么看?我正在寻找一种非常干净利落的方式!谢谢 :)
我的目录结构如下所示.(我正在使用ext mvc)
我在这里宣布了js
<script type="text/javascript" src="http://extjs.cachefly.net/ext-4.0.2a/ext-all-debug.js"></script>
<script type="text/javascript" src="/ext/designer.js"></script>
Run Code Online (Sandbox Code Playgroud)
我的问题是当它调用商店时路径不正确."/ Jobs/edit /"是包含js的页面
https://www.mysite.com/Jobs/edit/app/store/JobTypes.js?_dc=1326712425128
那么我如何使用extjs(在我现有的Web应用程序中)以便它将使用正确的路径.
这是设计师js
Ext.Loader.setConfig({
enabled: true
});
Ext.application({
name: 'MyApp',
stores: [
'JobTypes',
'SalesContact',
'Job',
'AccountHandlers'
],
launch: function() {
Ext.QuickTips.init();
var cmp1 = Ext.create('MyApp.view.Jobs', {
renderTo: Ext.getBody()
});
cmp1.show();
}
});
Run Code Online (Sandbox Code Playgroud)
我在配置后尝试了以下内容但它似乎没有覆盖路径.
Ext.Loader.setPath('MyApp', '/Ext/App');
Run Code Online (Sandbox Code Playgroud) 我已经扩展Ext.data.Operation到实现自定义commitRecords方法.
在Ext.data.Operation类用于商店和其代理之间的所有通信.
该commitRecords方法具体用于根据从代理写入器返回的数据更新数据存储中的数据.
我似乎无法掌握如何设置代理以使用我的扩展版本Ext.data.Operation.
我一直在搜索Ext.data.*包,但似乎无法找到Ext.data.Operation创建的位置,所以我将知道要使用Ext.data.Operation自定义commitRecords方法使用这个新的扩展类的类.
有没有其他人延长过这个,可以给我一些指示?
基于Sencha的MVC应用程序架构指南中的文件结构部分创建一个新的Ext JS 4.1.1应用程序我最终得到了这个结构:
/wwwroot
/myapplication
/app
/controller
/view
app.js
/extjs-4.1.1
Run Code Online (Sandbox Code Playgroud)
app.js文件包含:
Ext.Loader.setConfig({
enabled: true
});
Ext.application({
appFolder: '/myapplication/app',
autoCreateViewport: true,
name: 'MyApplication',
controllers: [
...
]
});
Run Code Online (Sandbox Code Playgroud)
一切都很好.然后我将app.js包含在我的服务器端 MVC应用程序中输出(不要与客户端 Ext JS MVC结构混淆).使用的语言和服务器端应用程序的结构对于这个问题并不重要,但输出的结果是.在开发中,应用程序的URL是:
http://servername/someidentifier1/someidentifier2
Run Code Online (Sandbox Code Playgroud)
与许多应用程序一样,mod_rewrite用于赋予标识符含义并将URL映射到服务器端代码.这些标识符不映射到"物理"目录.此URL的输出是:
<!DOCTYPE html>
<html>
<head>
<title>MyApplication</title>
<link href="/extjs-4.1.1/resources/css/ext-all-debug.css" media="screen" rel="stylesheet" type="text/css" >
<script type="text/javascript" src="/extjs-4.1.1/ext-debug.js"></script>
<script type="text/javascript" src="/myapplication/app.js"></script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Ext JS的是不是在默认的推荐位置,是/wwwroot/myapplication/extjs-4.1.1,而是一个级别,因为它在多个应用程序之间共享.如果您回顾上面的app.js,您还会注意到需要设置的appFolder设置,以便使用"不存在"的URL.
这一切都可以在开发中正常工作,但下一步是使用Sencha SDK Tools生成代码的"构建" (问题基于适用于Windows的2.0.0 Beta 3版本).这是它出错的地方.我采取以下步骤:
sencha create jsb -a …我正在研究extjs 4 MVC应用程序.
应用程序运行Viewport,其中包含tabpanel.每个选项卡都有自己的控制器和多个视图
请访问http://wap7.ru/folio/ext-reuseable-store/TE.html查看我的沙盒
我有一个商店多次使用(例如topmenu组合框中的一个选项卡,clietns网格中的另一个选项卡.)配置了autoload的商店:true.代理在模型中配置.
我的问题:Store多次加载 - 在控制器[stores]数组中提到.
如果我从数组中删除一个[stores] controller- combobox将为空,尽管它表示store:Ext.getStore('STORE-ID')
请给我一个提示,或者重新使用商店(不是模型)的例子,如http://docs.sencha.com/ext-js/4-0/#!/guide/mvc_pt2
我有一个边框布局,让我们说两个区域; 中心和西部.西区添加了分离器参数并且是可折叠的.现在我有一个工具栏,我想隐藏/显示西部区域.我通过调用toggleTargetCmp()拆分器的方法解决了这个问题.嗯,我知道,这是一个私有方法,不应该使用,但我发现没有其他方法来存档.到现在为止还挺好.这一切都有效.
但是现在我想隐藏分割器和占位符(getCollapseTarget()如果单击工具栏中的按钮,则使用拆分器的方法获取占位符ownet ).我尝试使用setVisible(false)哪个适用于拆分器,但它对占位符不起作用...在深入查看占位符实例后,我可以告诉它已设置为hidden: true但是它使用hideMode: 'offsets'默认值加上hiddenAnchestor: false未记录的API.
基于hideMode的API文档,我尝试将它设置为'display'
在调用之前setVisible(false)没有任何运气,占位符仍然保持可见.
那么我怎么能隐藏这个平板电脑呢?或者甚至有更好的方法来归档这个?
我还在学习Extjs和mvc所以我有一个设计问题,我相信有人可以为我解答.我的问题是:
我有2个控制器可以处理两个不同的视图.调用两个控制器中的任何一个以基于用户类型呈现正确的视图.所以在我的情况下,如果用户是管理员,那么他们将获得基于凭证的管理员视图,如果该人是标准用户,那么他们将获得标准视图.决策逻辑应该放在app.js中还是应该有另一个控制器决定调用哪个控制器?
我想的一种方式:
管理员控制器
Ext.define('adminController', {
// handles admin
})
Run Code Online (Sandbox Code Playgroud)
标准用户控制器
Ext.define('standardController', {
// handles standard
})
Run Code Online (Sandbox Code Playgroud)
App.js
Ext.application({
name: 'MTK',
autoCreateViewport: true,
if(admin) {
controllers: ['adminController']
}
else(std){
controllers: ['standardController']
}
});
Run Code Online (Sandbox Code Playgroud)
另一个想法:
管理员控制器
Ext.define('adminController', {
// handles admin
})
Run Code Online (Sandbox Code Playgroud)
标准用户控制器
Ext.define('standardController', {
// handles standard
})
Run Code Online (Sandbox Code Playgroud)
主控制器
Ext.define('mainController', {
if(admin){
call adminController
}
else(std){
call standardController
}
})
Run Code Online (Sandbox Code Playgroud) 我有这种类型的JSON:
{"value":[{"idProductCategoryAttributeValue":43,"value":"7","sortOrder":0}]}
Run Code Online (Sandbox Code Playgroud)
我想要个别参数值.如何在Ext JS 4或简单的JavaScript中解析此JSON字符串?
我正在尝试向网格中的列标题下拉菜单添加一个按钮.但是,我只想将它添加到具有某些itemId的列中.到目前为止,我已经将按钮添加到所有列,请参阅下面的代码.我不知道在哪里可以检查每个列的itemId,但它似乎没有遍历列.这有什么解决方法吗?谢谢!
items:[{
region:'center',
xtype:'grid',
columns:{
items: COLUMNS, //defined in index.php
},
store:'Items',
selType: 'checkboxmodel',
listeners: {
afterrender: function() {
var menu = Ext.ComponentQuery.query('grid')[0].headerCt.getMenu();
menu.add([{
text: 'edit',
handler: function() {
console.log("clicked button");
}
}]);
}
}
}],
Run Code Online (Sandbox Code Playgroud) extjs ×10
extjs-mvc ×10
extjs4 ×8
extjs4.1 ×3
javascript ×2
datastore ×1
extjs-stores ×1
extjs4.2 ×1
grid ×1
localization ×1
proxy ×1
reusability ×1
symfony ×1