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()默认情况下,一旦它附加到选择 -.fetch()一旦选择打开/启动,它将触发。在手动执行此操作的同时,由于数据被缓存,您还将获得更快的响应 UI。

由于未定义,查询将是通配符 - 尽管也可以在 fetch 配置对象中指定(如果需要最小片段,仅用于验证成功的身份验证)。

两个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 回答