Сенча коснуться одного экземпляра магазина для нескольких магазинов - PullRequest
4 голосов
/ 03 августа 2011

Итак, у меня есть два магазина, которые используют одну и ту же модель, они абсолютно одинаковы во всех отношениях (за исключением, конечно, их названий). Я хочу два разных магазина.

app.stores.newsFeed = new Ext.data.Store({
   model: 'app.models.feedData',
   proxy: {
      type: 'scripttag',
      url: 'http://query.yahooapis.com/v1/public/yql',
      extraParams: {
        format: 'json'
    },
    reader: {
        root: 'query.results.item'
    }
  } 
});

app.stores.eventsFeed = new Ext.data.Store({
   model: 'app.models.feedData',
   proxy: {
      type: 'scripttag',
      url: 'http://query.yahooapis.com/v1/public/yql',
      extraParams: {
        format: 'json'
    },
    reader: {
        root: 'query.results.item'
    }
}
});

У меня вопрос: можно ли сэкономить место, избавившись от кода, и использовать только один экземпляр хранилища, чтобы мне не пришлось повторно объявлять еще один новый Ext.data.Store?

что-то вроде:

store = new Ext.data.Store(...);
app.stores.newsFeed = store;
app.stores.eventsFeed = store;

Я пробовал это раньше, но оба были назначены в один и тот же магазин, поэтому, когда один был изменен, другой тоже.

1 Ответ

6 голосов
/ 03 августа 2011

Просто расширьте компонент extJS, и вы сможете быстро получить экземпляры вашего компонента:

MyStore = Ext.extend(Ext.data.Store, {
    constructor : function(config) {
        config = Ext.apply({
            model: 'app.models.feedData',
            proxy: {
                type: 'scripttag',
                url: 'http://query.yahooapis.com/v1/public/yql',
                extraParams: {
                     format: 'json'
                },
                reader: {
                     root: 'query.results.item'
                }
            } 
        }, config);                 
        MyStore.superclass.constructor.call(this, config);
    }, 

    onDestroy : function(config) {
        MyStore.superclass.onDestroy.apply(this, arguments);
    }
});

И создайте столько независимых экземпляров, сколько хотите:

app.stores.newsFeed = Ext.create(MyStore, {});
app.stores.eventsFeed = Ext.create(MyStore, {});
...