So, I'm Sencha Saint-Noub, and I may have stumbled upon my head. What I'm trying to do is filter data, which I have from one main list, then expand. So, I have my main list - Categories. When a category is selected, a list of places appears. I have problems with my models to talk to each other (I think). Since it costs right now, if I select a category, all my data is returned, where all I want is the selected category. I can filter my store using the property and the specified value. Is it possible to set the value as a variable that I pass from my categories menu? I was cr
Here is my code: Category.js
app.views.CategoryList = Ext.extend(Ext.Panel, { layout: 'card', fullscreen: true, scrolling: 'vertical', initComponent: function() { //Check if device is a phone, if so only display the title since the viewport is smaller if (!Ext.is.Phone) { var listTemplate = '{post_type}'; } else { var listTemplate = '{post_type}'; } this.list = new Ext.List({ grouped: false, indexBar: false, itemTpl: '{post_type}', store: app.stores.CategoryList, listeners: { selectionchange: {fn: this.onSelect, scope: this} } }); ///selectionchange : function(){ // this.store.filter('post_type', listTemplate) //this.onSelect('post_type') this.listpanel = new Ext.Panel({ layout: 'fit', items: this.list, dockedItems: [{ xtype: 'toolbar', title: listingTitle }], listeners: { activate: { fn: function(){ this.list.getSelectionModel().deselectAll(); Ext.repaint(); }, scope: this } } }); this.items = this.listpanel; app.views.CategoryList.superclass.initComponent.call(this); }, onSelect: function(sel, records){ if (records[0] !== undefined) { var categoryCard = new app.views.LocationsList({ store: app.stores.LocationList, //store: app.stores.LocationList.filter('post_type',null), prevCard: this.listpanel, record: records[0] }); this.setActiveItem(categoryCard, 'slide'); } } }); Ext.reg('CategoryList', app.views.CategoryList);
LocationModel.js
//The model will load the locations information you entered in the locations.xml file after it has been fed through JSON //Register the Location Model Ext.regModel('Locations', { fields: [{name: 'post_title', type: 'string'}, {name: 'post_type', type: 'string'}], belongsTo: 'Category' }); //Load XML data from JSON into local store app.stores.LocationsList = new Ext.data.Store({ model: "Locations", //Model to use for the Store /*filters: [ { property: 'post_type', value: null } ],*/ sorters: [{ property: 'post_title', //Set the title as a sorter to the listing card can use the grouped list layout direction: 'ASC' }], proxy: { type: 'ajax', //Load JSON from our source defined in the config file url: HTTP_ROOT + '/' + JSON_SOURCE, reader: { type: 'json', root: 'markers1' }, id : 'LocationsID' }, getGroupString : function(record) { // return the first character of the address in order to group return record.get('post_title')[0]; }, listeners: { 'load': function (t, r, s) { //Fire custom event once all the load is complete Ext.dispatch({ controller: app.controllers.map, action: 'loaded', records: r }); }, }, autoLoad : true //We start loading the info into the datastore immediately after the app is started to make it available ASAP });
CategoryModel.js
//The model will load the locations information you entered in the locations.xml file after it has been fed through JSON Ext.regModel('Category', { fields: [ {name: 'post_type', type: 'string'},], hasMany: { model: 'Locations', name : 'locations', filterProperty: 'post_type' } }); var data = { "categories":[ {"post_type":"trails"}, {"post_type":"Adventure Guides"}, {"post_type":"brew"}, {"post_type":"Festivals and Races"}, {"post_type":"Paddle and Rafting"}, {"post_type":"Parks and Forests"}, {"post_type":"Campgrounds"}, {"post_type":"Rivers, Mountains, Lakes"} ] }; //Load XML data from JSON into local store app.stores.CategoryList = new Ext.data.Store({ model: "Category", //Model to use for the Store data: data, sorters: [{ property: 'post_type', //Set the title as a sorter to the listing card can use the grouped list layout direction: 'ASC' }], proxy: { type: 'memory', //Load JSON from our source defined in the config file //url: HTTP_ROOT + '/' + JSON_SOURCE, reader: { type: 'json', root: 'categories' }, id : 'CategoryID' }, getGroupString : function(record) { // return the first character of the address in order to group return record.get('post_type')[0]; }, listeners: { 'load': function (t, r, s) { //Fire custom event once all the load is complete Ext.dispatch({ controller: app.controllers.map, action: 'loaded', records: r }); }, }, autoLoad : true //We start loading the info into the datastore immediately after the app is started to make it available ASAP });