0

スタックオーバーフロー コミュニティの皆様、こんにちは。

はい、私は知っています。他の人も同じ問題を抱えていますが、同じファイルでストアを定義しています。

Uncaught SyntaxError: Unexpected identifier Alertas.js:105 Uncaught Error: 次のクラスは、ファイルがロードされていても宣言されていません: 'myMoney.view.Alertas'。タイプミスの可能性があるため、対応するファイルのソース コードを確認してください: 'app/view/Alertas.js

私は自分の店を別の方法で呼び出す必要があると思いますが、ここに私の質問があります:

検索リストに既に定義されているストアを呼び出す方法は?

私のコードがあります:

Ext.define('myMoney.view.Alertas',{
extend: 'Ext.navigation.View',
fullscreen: true,
scrollable: true,
styleHtmlContent: true,
xtype: 'alertas',

config: {
    title: 'Contactos',
    iconCls: 'bookmarks',

    items: [
        {
            xtype: 'list',
            grouped: true,
            ui: 'round',
            title: 'Contactos',
            fullscreen: true,
            itemTpl: '{title}',
            styleHtmlCls: true,
            //cls: 'x-contacts',
            store: 'Contactos',
            itemTpl: [
                '<div class="headshot" style="background-image:url(resources/images/headshots/{headshot});"></div>',
                '{firstName} {lastName}',
                '<span>{title}</span>'
            ].join(''),

            items: [
                {
                    xtype: 'searchfield',
                    placeHolder: 'Buscar contacto...',
                    listeners: {
                        scope: this,
                        clearicontap: this.onSearchClearIconTap,
                        keyup: this.onSearchKeyUp
                    }
                },
            ]
        },
    ]
},

/**
 * Llamado cuando la barra de busqueda tiene un evento keyup
 */
onSearchKeyUp: function(field) {
    //Se obtiene el store y el valor del field
    var value = field.getValue(),
        //store = this.getStore();
            //NOW:
            store = Ext.data.StoreManager.lookup('Contactos');

    //se limpian los filtros actuales del store para comenzar la nueva busqueda
    store.clearFilter();

    //Verificamos que el valor tenga alguna  modificacion
    if (value) {
        //El usuario pudo haber introducido espacion en blanco,asi que los cortamos para poder recorrer todo el valor 
        var searches = value.split(' '),
            regexps = [],
            i;

        //recorremos todo el valor
        for (i = 0; i < searches.length; i++) {
            //si no hay nada continuamos
            if (!searches[i]) continue;

            //Si encontramos algo creamos una expresion regular que es sensible a mayusculas
            regexps.push(new RegExp(searches[i], 'i'));
        }

        //Ahora se filtra el store
        //El metodo se pasara a cada record en el store
        store.filter(function(record) {
            var matched = [];

            //Iteramos a traves de cada expresion regular
            for (i = 0; i < regexps.length; i++) {
                var search = regexps[i],
                    didMatch = record.get('firstName').match(search) || record.get('lastName').match(search);

                //Si coincide el primer o ultimo nombre se coloca en la lista de los que coinciden
                matched.push(didMatch);
            }

            //Si nada se consigue no se retorna nada
            if (regexps.length > 1 && matched.indexOf(false) != -1) {
                return false;
            } else {
                //Si no se muestra lo que se encontro
                return matched[0];
            }
        });
    }
},
/**
 * Llamado cuando el usuario presiona el icono de 'x' en la barra de busqueda
 * Solo que quitan los filtros del store
 */
onSearchClearIconTap: function() {
    //this.getStore().clearFilter();
        //NOW:
        store = Ext.data.StoreManager.lookup('Contactos');
}
/**
 * Metodo llamado para tomar el store
 */
      //I DELETE THIS FUNCTION
/*getStore: function() {
        this.store = 'myMoney.store.Contactos'*/
}
});
4

3 に答える 3

0

idで指定したストアを使用するには、Ext.StoreManagerを使用する必要があります。

例:

この店で:

Ext.create('Ext.data.Store', {
    model: 'SomeModel',
    storeId: 'myStore'
});

使用する

var store = Ext.data.StoreManager.lookup('myStore');

またはビューで使用します。

Ext.create('Ext.view.View', {
    store: 'myStore',
    // other configuration here
});
于 2012-07-17T15:33:50.267 に答える
0

ゲッターには気をつけてください:)

getStore: function() {
        this.store = 'myMoney.store.Contactos'
}

クラスのメンバーに割り当てるだけでなく、店を返すつもりだったと思います。

onSearchKeyUp: function(field) {
    //Se obtiene el store y el valor del field
    var value = field.getValue(),
        store = this.getStore();  // undefined

変数ストアは常に未定義です...

于 2012-07-17T09:38:21.860 に答える
0

上記のNeoMorfeoコードは、ストアの値を取得するだけで正しいです

ID で指定されたストアを使用するには、Ext.StoreManager を使用する必要があります。

例:

この店で:

Ext.create('Ext.data.Store', {
    model: 'SomeModel',
    storeId: 'myStore'
});

使用する

var store =  Ext.getStore('myStore');

またはビューで使用します。

Ext.create('Ext.view.View', {
    store: 'myStore',
    // other configuration here
});
于 2014-02-03T09:21:54.290 に答える