0

dojo.store.JsonRestインスタンスをストアとして使用するdijit.form.FilteringSelectがあります。

ストアのバックエンドサービスは、認証が必要な別の場所からデータを取得します。場合によっては、この認証が失敗することがあります。そのことをブラウザに報告したいと思います。

返されるエラーはJSONであり、応答は404であるため、これがコンソールに記録されていることがわかります。ただし、それにフックする方法が見つからないようです。そのため、FilteringSelectインスタンスまたはJsonRestインスタンスを介して、何か便利なことができます。

次のコードがある場合、エラーハンドラ関数をどこに追加できますか?

var store = new JsonRest({
    target: "/json/store/",
    idProperty: "InternalID"
});

var widget = new FilteringSelect({
    id: 'widgetId',
    store: store,
    searchAttr: 'name'
}, 'widgetId'
});

使用されているDojoのバージョンは1.7.3です。

4

2 に答える 2

2

結局、store.queryによって返されるQueryResultsをインターセプトし、適切なエラーハンドラーを使用して独自のDeferredを作成しました。FilteringSelectと同様に、キャンセルをトラップする必要もありました。

コードの結果の部分は、ストアの定義の後、FilteringSelectの前にあります。

aspect.after(store, 'query', function(QueryResults) {
    Deferred.when(QueryResults, function() {}, function(err) {
        if (err.dojoType && err.dojoType == 'cancel') {
            return; // ignore cancellations
        }
        // Do custom error handling here
    });
    return QueryResults;
});
于 2012-07-18T00:45:46.690 に答える
1

datastore.fetch()またはobjectstore.query()を手動で呼び出します。デフォルトでは、selectにアタッチされると.fetch()、selectが開いたり起動したりすると起動します。これを手動で行うと、データがキャッシュされるため、UIの応答も速くなります。

定義されていないため、クエリはワイルドカードになりますが、フェッチ構成オブジェクトでも指定できます(最小限のスニペットが必要な場合は、認証が成功したことを検証する場合のみ)。

2つのAPIはわずかに異なります

データストアを使用

var store = new DataStore({
    url: "/json/store/datastore"
});
store.fetch({
   onBegin: function(size, request) { },
   onItem:  function(item, request){ },
   onComplete: function(items, request) { },

   // youre looking for this hook
   onError: function(error, request) { }
});

またはJsonRestを使用(OPの要求)

var store = new JsonRest({
    target: "/json/store/",
    idProperty: "InternalID"
});

store.query(/* url query parameters, none = all */).addBoth(
  function(result) {
    console.log('success', result);
  },
  function(status) {
    console.log('error', status);
  }
);
var widget = new FilteringSelect({
    id: 'widgetId',
    store: store,
    searchAttr: 'name'
}, 'widgetId'
});
于 2012-07-16T15:03:23.110 に答える