dstore add()不向数据存储添加新项

时间:2016-08-23 16:39:15

标签: dojo

当我尝试将新项目添加到数据存储时,它不会添加它。但它接受我使用setData设置的数据项,并且我能够使用该对象,包括获取值,观察属性等。

如何向数据存储添加其他项目?

我的代码如下。

<script>

    require(
        [
        'dojo/_base/declare',
        'dstore/Memory',
        'dmodel/extensions/jsonSchema',
        'dmodel/validators/StringValidator',
        'dmodel/store/Validating',
        "dmodel/Model",
        "dojox/json/schema",
        "dojo/text!app/model/testing/baseSchema.json",
        ], 
    function (declare, Memory, jsonSchema, StringValidator, Validating, Model, DJS, mySchema) {


        var validatingMemory2 = (declare([Memory, Validating]))({
            Model: jsonSchema(
                {
                    "$schema": "http://json-schema.org/draft-04/schema#",
                    "title": "Form Elements",
                    "type": "array",
                    "items": {
                        "title": "Form Element",
                        "type": "object",
                        "properties": {
                            "id": {
                                "description": "identifier",
                                "type": "string"
                            },

                            "positionX": {
                                "type": "number"
                            },

                            "positionY": {
                                "type": "number"
                            },
                            "moduleType": {
                                "description": "type",
                                "type": "string"
                            }

                        },
                        "required": ["id"],
                        "additionalProperties": false
                    }
                }

                ),

            idProperty: "id",

            //additionalProperties: false //This indicates whether or not to allow additional properties outside of those defined by the schema. This defaults to true.
        });


        validatingMemory2.setData([{ "id": "one", "positionX": 100, "positionY": 200, "moduleType": "label" }]);
        console.log(validatingMemory2);

        validatingMemory2.add({ "id": "two", "positionX": 300, "positionY": 400, "moduleType": "label" }); //does not add this one

        console.log(validatingMemory2);

        var objectone = validatingMemory2.getSync("one");
        console.log(objectone.positionX); //100
        var objecttwo = validatingMemory2.getSync("two");
        console.log(objecttwo.positionX); //error undefined property

        var propOne = objectone.property("positionX");

        propOne.observe(function () {
            console.log("updated");
        });

        propOne.put(150);
    });
</script>

1 个答案:

答案 0 :(得分:1)

dstore.add方法返回一个承诺,不会立即添加。

  

add(object,[directives]) - 这会创建一个对象,并抛出一个错误   如果对象已存在。这应该回报一个承诺   新创造的对象。

您需要等待添加完成。

validatingMemory2.add({ "id": "two", 
                        "positionX": 300, 
                        "positionY": 400, 
                        "moduleType": "label" }).then(function(){
    var objecttwo = validatingMemory2.getSync("two");
    console.log(objecttwo.positionX);
});

或使用同步方法同步添加。

  

可以执行同步操作的商店可能提供类似的功能   使用Sync提供的获取,放置,添加和删除结束的方法   同步支持。例如,getSync(id)将直接返回一个   对象而不是承诺。 dstore / Memory存储提供Sync   方法

validatingMemory2.addSync({ "id": "two", "positionX": 300, "positionY": 400, "moduleType": "label" });