是否有已知的快捷方式在代码中引用商店?
我一直在使用Ext.getStore('MyStore')
,但现在意识到这不是最好的做法,因为当商店的ID被更改时,你必须通过代码重新编辑每次提及它。
作为一个快速而肮脏的解决方案,我想将它存储在app init的变量中:
App.MyStore = Ext.getStore('MyStore');
然后将该变量引用为
App.MyStore.load();
如果有一种已知的更好方法,我只是好奇。
答案 0 :(得分:2)
在我的应用程序中,我通常添加注射剂。 有一个“配置类”来保存存储(用Ext.getStore(“...”);声明),它将存储注入需要它的组件/控制器。
这样,如果您需要重命名某些内容或更改商店,例如在控制器中,您只需要更改配置类,而不再需要更改。
修改强>
所以你会有一个可以看起来像
的“配置”类beans: [
{
className : "MyApp.store.myStore",
ref: "myStore"
},
{
value: "some string value",
ref: "myValue"
}],
mapping: [
{
className: "MyApp.controller.MyController",
references:
[
"myStore",
"myValue"
]
},
{
className: "MyApp.controller.someOtherController",
references:
[
"myStore"
]
}
]
然后你会写另一个“注入”类,它使用这个配置通过 ref 值将“beans”注入其他类。
这里的优点是你可以将myStore引用的className更改为其他类,并且所有注入的类都有一个 new 类的实例。
例如,假设您此时只是将商店注入控制器,而不是其他任何内容。
您可以使用如下方法编写另一个控制器类: (假设你有一个对你的配置类的引用 - this.config)
injectStores: function()
{
//get the mapping
var mapping = this.config.mapping;
//go over every item in the mapping
for(var k in mapping){
//this makes the code a little easier to write
var ref = mapping[k];
//get the controller you will inject stores in
var controller = this.getController(ref.className);
//loop over all of the references
for(var j in ref.references){
//use the helper method to get the correct store name
var storeName = this._getBean(ref.references[j].className);
//and then use Extjs' method to get the store instance
var store = this.getStore(storeName);
//add a reference to the store in your controller
controller[j] = store;
}
}
},
_getBean: function(beanName)
{
//reference the beans array
var beans = this.config.beans;
//loop over every bean
for(var i in beans)
{
//if the names match return the bean
if(beans[i].ref === beanName)
{
return beans[i];
}
}
//no matches, so return null;
//this shouldn't happen when the mapping is correct
return null;
}
这是一个例子,我没有写出使这项工作所需的所有检查。 例如,当遇到第二个bean中的“value”属性时,此代码将失败。但是你可以轻松编写一些代码来处理不同的代码。
同样,这是代码只是作为将存储注入控制器的示例。 在此示例中,您应该能够执行:
this.getController("MyApp.controller.MyController").myStore.load();
如果注射工作正常。
我希望这可以作为帮助你的起点; - )
答案 1 :(得分:0)
我建议你试试deftjs.org。
DeftJS增强了Ext JS和Sencha Touch的API 构建块使大型开发团队能够快速构建 企业级应用程序,利用最佳实践并经过验证 顶级RIA开发人员发现的最佳模式 行业咨询公司。
还要确保使用MVC模式,然后您可以非常轻松地从控制器中引用您的视图,存储或字段:
var me = this,
view = me.getView(),
store = view.getStore(),
record = view.getRecord(),
data = record.getData(),
field = me.getMyCustomField();