Search code examples
model-view-controllersencha-touch

Should the store know the view?


Actually I am playing around with sencha touch. Sometimes my stores need to know my views. For example:

Ext.define('Ext.Panel', {
    id : 'myId',
    config : {
        padding: 5,
        fullscreen : true
    },
    moo : null
});

Ext.define('Ext.data.Store', {
    fetchSomething : function() {
        // Fetch stuff and set moo of view like this:
        Ext.getCmp('#myid').moo = 'fetched Data';
    }
});

This is a general question.

Is it allowed that the store can set properties of the view?

I think yes, because in a store, if you work with templates and load data, in callback method you can say view.setData(fetchedData).

And is the store a controller or model? Because sometimes I get data from server and have to change the structure so the view can make it visible. For example I get an array and make from it a map.


Solution

  • According to best practices, no, absolutely not!!

    The sencha touch data system allows views to automatically update themselves when the content of a store changes. You need to use dataviews or the record config along with the tpl config of a view to wire this all up.

    I wrote (quite an extensive) post about this for beginners on my blog a while back that will really help you with this (I hope!)

    http://senchatouchdev.com/wordpress/2014/01/03/an-overview-of-sencha-touch-2s-data-system/

    In brief:

    Model = a description of a type of data your app will handle

    Record = instance of model

    Store = collection of records

    View = something displayed on screen

    Controller = collection of references/methods that wire your app together