javascript - Dojo:TypeError:marketStore.query 不是函数

标签 javascript dojo dgrid dstore

我正在尝试扩展/修改来自 dojo 网站的示例,但遇到错误(使用 Firebug)并且不知道为什么。

这是在我的本地服务器上正常运行的原始教程: http://dojotoolkit.org/documentation/tutorials/1.6/realtime_stores/demo/demo.html

现在我要添加一个 RequestMemory 存储:

require([
'dojo/_base/declare',
'dojo/Deferred',
'dstore/Memory',
'dstore/RequestMemory',
'dstore/QueryResults',
'dgrid/Grid',
'dgrid/OnDemandGrid',
'dgrid/extensions/Pagination',
"dgrid/List", 
"dgrid/OnDemandGrid",
"dgrid/Selection", 
"dgrid/editor", 
"dgrid/Keyboard", 
"dgrid/tree", 
"dojo/_base/declare", 
"dojo/store/JsonRest", 
"dojo/store/Observable", 
"dojo/store/Cache", 
"dojo/store/Memory", 
"dojo/_base/Deferred", 
"dojo/query",
"dojo/dom", 
"dojo/dom-construct", 
"dojo/domReady!"
],

function (declare, Deferred, Memory, RequestMemory, QueryResults, Grid, OnDemandGrid, Pagination, Observable, JsonRest, query, dom, domConstruct) {

var data = [
{"name": "Dow Jones", "index": 12197.88, "date": new Date()},
{"name": "Nasdaq", "index": 2730.68, "date": new Date()},
{"name": "S&P 500", "index": 1310.19, "date": new Date()}
];

var store = new (declare(RequestMemory, {
fetchRange: function () {
// Override RequestMemory's fetchRange method with
// one that introduces a delay.
var dfd = new Deferred();
var promise = this.inherited(arguments);
promise.then(function (data) {
  // Add an artificial delay of 1 second
  setTimeout(function () {
  dfd.resolve(data);
  }, 1000);
});
return new QueryResults(dfd, {
  totalLength: promise.totalLength
  });
}
}))({
target: 'node_data.json'
});         

...按照原始示例进行操作。

插入“RequestMemory”存储后出现以下错误:

TypeError: marketStore.query is not a function
var results = marketStore.query({});

为什么?

最佳答案

您似乎在尝试将 dstore 与 dgrid 0.3 一起使用。那是行不通的,这就是您收到该错误的原因(dgrid 正在尝试调用 dstore 中不存在的 dojo/store query API)。 dgrid 在 0.4 中切换到 dstore。

您有 3 个选择:

  • 将 dgrid 0.4 与 dstore 一起使用
  • 使用 dgrid 0.3 和 dstore 使用 DstoreAdapter将商店转换为 dojo/store API
  • 使用来自 dojo-smore 的原始 RequestMemory 存储(基于 dojo/store API)代替

编辑:根据对问题和相关教程的更多阅读,很明显,对 query 的调用可能不是来自 dgrid,而是来自代码这是从教程中复制粘贴的(上面的问题中没有包含)。

鉴于有问题的教程使用 dojo/store 但 dgrid 0.4 使用 dstore,您将无法简单地复制粘贴信息,但 dgrid 0.4 有一个 store tutorial dstore 有 tutorials它自己的,包括它自己的实时商店教程版本。

关于javascript - Dojo:TypeError:marketStore.query 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29343678/

相关文章:

javascript - 了解如何将 dojo.store.memory 数据类型发送到服务器

javascript - OpenUI5 控件不可见

javascript - 在特定滚动位置隐藏/显示内容

javascript - 使用自定义排序对 html 表按 HH :MM:SS format 中的时间进行排序

javascript - 拦截从 Dojo dgrid 选择返回的数据

javascript - 访问 dGrid 中对象符号为 '@' 的字段

javascript - 如何摆弄一个简单的 OnDemandList (dgrid)?

javascript - 重复JS函数

ajax - DOJO onclick 饼图切片以向下钻取

javascript - 单击按钮从 Lotus Notes 调用 Javascript