Javascript Dojo:TypeError:marketStore.query不是函数

Javascript Dojo:TypeError:marketStore.query不是函数,javascript,dojo,dgrid,dstore,Javascript,Dojo,Dgrid,Dstore,我试图扩展/修改dojo网站上的一个示例,但遇到了一个错误(使用Firebug),不知道为什么 这是在我的本地服务器上正确运行的原始教程: 现在我尝试添加一个RequestMemory存储: require([ 'dojo/_base/declare', 'dojo/Deferred', 'dstore/Memory', 'dstore/RequestMemory', 'dstore/QueryResults', 'dgrid/Grid', 'dgrid/OnDemandGrid', 'dgr

我试图扩展/修改dojo网站上的一个示例,但遇到了一个错误(使用Firebug),不知道为什么

这是在我的本地服务器上正确运行的原始教程:

现在我尝试添加一个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试图调用dojo/store
query
API,它在dstore中不存在)。dgrid在0.4中切换到dstore

您有3种选择:

  • 将dgrid 0.4与dstore一起使用
  • 将dgrid 0.3与dstore一起使用,将存储转换为dojo/store API
  • 改为使用原始的RequestMemory存储(基于dojo/storeapi)
EDIT:根据对问题和相关教程的详细阅读,很明显,
query
的调用可能不是来自dgrid,而是来自从教程中复制粘贴的代码(上面的问题中没有包含)


考虑到相关教程使用dojo/store,而dgrid 0.4使用dstore,您将无法简单地复制粘贴信息,但dgrid 0.4有一个和dstore有自己的,包括自己版本的实时商店教程。

什么是
marketStore
,这一行在哪里?它在原始教程中定义:。我刚刚使用dgrid 0.4和dstore 0.4将代码添加到外部存储(RequestMemory)Im中,但本教程可能基于旧版本。我认为这与这个版本和模块相混淆。我会尽快再试一次。谢谢,dgrid 0.4不会尝试调用存储的查询方法。如果您是逐字复制该教程的源代码,那么是的,您将调用错误的方法,因为该教程使用dojo/store。您可能需要查看和。