【问题标题】:Dojo Cache - Tree - Uncaught TypeError: object is not a functionDojo 缓存 - 树 - 未捕获的类型错误:对象不是函数
【发布时间】:2015-08-14 03:37:01
【问题描述】:

我正在尝试将数据存储缓存与树一起使用。

我收到未捕获的类型错误:object is not a function error.

我已经测试了数据并且它被正确提取。

我检查了 JSON,它也是正确的。

我哪里出错了?

    require(["dojo/store/JsonRest"
        , "dojo/store/Memory"
        , "dojo/store/Cache"
        , "dojo/json"
        , "dijit/tree/ObjectStoreModel"
        , "dijit/Tree"
        , "dojo/domReady!"],
        function (JsonRest, Memory, Cache, ObjectStoreModel, Tree) {

            var restStore = new JsonRest({ target: "/DataStore/", idProperty: "id" });

            var memoryStore = new Memory({
                idProperty: "id",
                getChildren: function (object) {
                    return this.query({ parent: object.id });
                }
            });

            var store = new Cache(restStore, memoryStore);

            store.query({ type: "index" }).forEach(function (item) {
                console.log(item.name);
            });

            var docModel = new ObjectStoreModel(
                {
                    store: store,
                    getRoot: function (onItem) {
                        this.store.get("index").then(onItem);
                    },
                    mayHaveChildren: function (object) {
                        return object.type === "folder" || object.type === "root";
                    }
                });

            var docTree = new Tree({
                model: docModel,
                onOpenClick: true,
                onClick: function (item) {
                    if (item.type == "link") {
                        OpenLink(item.link);
                    }
                },
                persist: false
            }, "divTree");

            docTree.startup();

        });

【问题讨论】:

  • 这是目标 URL /DataStore/ 返回的 JSON [ { name: "Folders", id: "index", type: "index", root: true }, { name :“工作区”,id:“WKSP”,父:“索引”,类型:“文件夹”},{名称:“通用公共文件夹”,id:“GEN”,父:“索引”,类型:“文件夹” }, { name: "BIRM Public Folders", id: "BIRM", parent: "index", type: "folder" }, { name: "LA Public Folders", id: "LA", parent: "index" , type: "folder" }, { name: "SECURE Public Folders", id: "SEC", parent: "index", type: "folder" }, { name: "My Matters", id: "MMAT",父:“索引”,类型:“文件夹”}]

标签: caching dojo tree


【解决方案1】:

这与Cache 的工作方式有关。第一次调用store.get(),它使用JsonRest 存储返回PromisePromisethen() 函数,所以没有问题。下次调用它时,它会使用 Memory 存储,它会返回您的 JavaScript 对象本身。您的 JavaScript 对象没有 then() 函数,因此会引发错误。这可以通过将store.get() 包围在when() 中来解决。

尝试改变

this.store.get("index").then(onItem);

when(this.store.get("index")).then(onItem);

查看here了解更多详情。

【讨论】:

    猜你喜欢
    • 2014-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多