0

ログインが成功するとコントローラーに作成されるストアがあります。コードは次のようになります。

コントローラーは login.js

    //////////// create a JSONstore and load companies into it ////////////// 
var companies_data = new Ext.data.JsonReader({}, [ 'companyame']);      
    var storeCompanies = new Ext.data.JsonStore({
    storeId: 'storeCompanies', 
          proxy: new Ext.data.HttpProxy({
              type: 'GET',
            url: url+'dashboard/?Uid='+uid+'&Ude='+ude,
            reader: {
                type: 'json',
                root: 'root',
                totalProperty: 'total'
            },
            headers: {
               'Accept' : 'application/json;application/x-www-form-urlencoded',
               'Content-Type' : 'application/x-www-form-urlencoded',
            },
             params: {
                Uid: localStorage.uid,
                Ude: localStorage.ude,
            },
          }),
          reader: companies_data,  
          root: 'd',
          type: 'localstorage',
          autoLoad : true,
          id: 'company_Id',
          scope : this,
          fields: ['companyname']
        });

このコードは、ログインが成功したときに呼び出され、値が渡される関数です。

これはそのままで問題なく動作し、ログインビューでストアを利用できます

メインビューでストアを利用できるようにする必要があります。

私の login.js コントローラーでは、次のようにメインビューを参照しました。

Ext.define('axis3.controller.Login', {
extend: 'Ext.app.Controller',
config: {
    refs: {
        loginView: loginview,
        mainView: 'mainview',
        chartView: 'chartview'
    },
    control: {
        loginView: {
            signInCommand: 'onSignInCommand'
        },
        mainMenuView: {
            onSignOffCommand: 'onSignOffCommand'
        }
    }
},

しかし、これは役に立たないようです。

メインビューで次を使用すると

var companyStore = Ext.getStore('storeCompanies'); // 
console.log('1-Number : ' + companyStore.getCount()); // Using getCount method.
var anotherCompany = { companyname: 'North Wells'};
companyStore.add(anotherCompany);  // 
console.log('2-Number : ' + companyStore.getCount()); // Using getCount method.
//////////////

Ext.define('axis3.view.Main', {
extend: 'Ext.form.Panel',
requires: ['Ext.TitleBar','Ext.data.Store'],
alias: 'widget.mainview',......................

次のエラーが表示されます。

TypeError: 'undefined' はオブジェクトではありません ('companyStore.getCount' を評価しています)

別のビューでストアを使用するにはどうすればよいですか?

4

2 に答える 2

0

問題を把握した場合。ビューは、存在する前にストアを使用しようとしています。ストアは、ユーザーがログインしたときにのみ作成されます。

私が使用することにした解決策は、空のストアを作成し、ログインに成功したときにデータを追加することです。

var anotherCompany = {companyname: 'Keep Groom'};
companiesStore2.add(anotherCompany);  // Use the add function to add records or model instances.

これはうまくいくようです

于 2013-08-14T09:33:26.873 に答える