我对sencha touch和extjs全新。这是场景:
假设您有此商店将商品保存在购物车中:
Ext.define('MyApp.store.CardItems', {
extend: 'Ext.data.Store',
requires: ['MyApp.model.CardItem','Ext.data.proxy.SessionStorage'],
config :{
model: 'MyApp.model.QuoteItem',
autoLoad: true,
autoSync: true,
identifer: 'uuid',
proxy:{
type:'sessionstorage',
id:'card'
}
}
});
我知道在sencha中,store
用于将模型项列表绑定到网格中。我只是想知道为这个类添加自定义方法是否是一个好主意。
例如。假设我们需要一种方法来获取商店中所有商品的总体数量。从OOP的角度来看,直接在商店中引入这种方法是有意义的:
getOverallQuantity:function () {
var sum = 0;
this.each(function (item) {
sum += parseInt(item.get('amount'));
}, this);
return sum;
}
我只是想知道将这些方法直接放在商店上是否是一个好主意,或者是否由于某种原因避免这种方法?
答案 0 :(得分:1)
继续Christoph,扩展你的课程,这是你的事,没关系:)
我正在创建商店/模型/代理的大型层次结构,而且一切正常。 Sencha Foundation Classes(SFC!)很酷!
干杯,奥列格
答案 1 :(得分:1)
我没有看到分层方法有什么问题,但继承会有点像“怪异”的imo。业务逻辑将绑定到一个模型..某些字段和什么不是,但方法将在商店,这将只接受某些类型的模型。通过一些小的调整来存储,您可以在模型上存在您的业务逻辑方法。这完全取决于个人喜好,所需模型的数量,字段如何捆绑在一起等等。
...
我知道这是示例代码,但在原型上放置config
之类的对象是不好的做法,可能会导致共享实例错误。您的示例可能会暴露代理共享问题。
var newCards = new MyApp.store.CardItems(),
oldCards = new MyApp.store.CardItems();
newCards.load({params: {status: 'new'}});
oldCards.load({params: {status: 'old'}});
首先加载的存储将覆盖数据,因为代理是共享的。通过执行以下操作可以避免这种情况:
Ext.define('MyApp.store.CardItems', {
extend: 'Ext.data.Store',
requires: ['MyApp.model.CardItem', 'Ext.data.proxy.SessionStorage'],
constructor: function() {
Ext.apply(this, {
model: 'MyApp.model.QuoteItem',
autoLoad: true,
autoSync: true,
identifer: 'uuid',
proxy: {
type: 'sessionstorage',
id: 'card'
}
});
this.callParent(arguments)
}
});
答案 2 :(得分:0)
我认为您的提案没有任何问题。值得记住的是,除了使用extend之外,您还可以覆盖ExtJs的基类,如下所示:
Ext.onReady(function(){
Ext.override(Ext.panel.Panel, {
// Add functionality to a panel to determine
// if it's the active tab within a tab panel or not
isActiveTab: function()
{
var owningTabPanel = this.up('tabpanel');
if ( owningTabPanel )
{
return owningTabPanel.getActiveTab() == this;
} else {
return false;
}
}
});
});