0

次のコードがあります。ここでは、ストアを作成し、ロード時に name_holder 値を渡してクエリを実行しています。したがって、基本的にクエリは次のようになります

 /query/name:name_holder* 

ここで、name_holder の値はユーザーが入力します。今、返されたレコード値を取得しようとしていますが、store.load 関数の外ではアクセスできません。私のアプローチは正しいですか?私は ext.js が初めてで、助けていただければ幸いです。ありがとうございました。

var store = Ext.create("Ext.data.Store", {
                    fields: [
                             {name: 'name', type: 'string'},
                             {name: 'id',  type: 'string'},

                         ],
                    proxy : name_proxy,
                });

var data_names= store.load({
                    params : {
                        query : name_holder
                    },
   callback: function(records, operation, success) {
                            if (success) {
                                var data_id=  records[0].data.id;
                             } else {
                                console.log('error');
                            }
                        }
                });
    console.log(data_id);

関数内では data_id 値にアクセスできますが、外部ではアクセスできません。したがって、console.log の行でエラーが発生します。

4

1 に答える 1

0

実際のタスクが、指定された文字列と正確に一致するidレコードの を見つけることであるname場合、ストアで大騒ぎする必要はありません。のようなクエリに応答して、サーバー側 API が ID を返すようにするだけ/query/name:name_holderです。ID を取得するには、AJAX 要求を実装するだけです。

何らかの理由でストアに固執する必要がある場合は、サーバー側で完全一致を実行して、/query/name:name_holder要求されたときに 1 つのレコードのみを返すようにするのが最善です。idこの場合、ストアには読み込み時にレコードが 1 つしかないため、次の方法で簡単に見つけることができますstore.getAt(0).getId()

最後に、サーバー側で何も触れられない、または触れたくない場合は、queryメソッドを使用して、関心のあるレコードを除外します。

store.query(
         'name',
         name_holder,
         false, // not anymatch
         true, // case sensitive
         true // exact match
     ).getAt(0).getId();

ローカル データの例: https://fiddle.sencha.com/#fiddle/pbo

于 2015-06-24T11:37:00.707 に答える