Dojo Cache - Tree - Uncaught TypeError:object不是函数

时间:2014-09-07 17:49:58

标签: caching dojo tree

我正在尝试使用树的数据存储缓存。

我收到了未捕获的TypeError: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();

        });

1 个答案:

答案 0 :(得分:1)

这必须做A2的工作方式。第一次调用Cache时,它会使用返回store.get()的{​​{1}}商店。 JsonRest具有Promise功能,因此没有问题。下次调用时,它会使用Promise商店返回您的JavaScript对象本身。您的JavaScript对象没有then()函数,因此会引发错误。这可以通过围绕Memory中的then()来修复。

尝试更改

store.get()

when()

查看here了解更多详情。