当我尝试将新项目添加到数据存储时,它不会添加它。但它接受我使用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>
答案 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" });