dstore add() 不向数据存储添加新项目
dstore add() not adding new items to data store
当我尝试将新项目添加到数据存储时,它没有添加。但是它接受我使用 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>
dstore.add
方法returns一个承诺,不会立即添加。
add(object, [directives]) - This creates an object, and throws an error
if the object already exists. This should return a promise for the
newly created object.
您需要等待添加完成。
validatingMemory2.add({ "id": "two",
"positionX": 300,
"positionY": 400,
"moduleType": "label" }).then(function(){
var objecttwo = validatingMemory2.getSync("two");
console.log(objecttwo.positionX);
});
或者使用sync方法同步添加
Stores that can perform synchronous operations may provide analogous
methods for get, put, add, and remove that end with Sync to provide
synchronous support. For example getSync(id) will directly return an
object instead of a promise. The dstore/Memory store provides Sync
methods
validatingMemory2.addSync({ "id": "two", "positionX": 300, "positionY": 400, "moduleType": "label" });
当我尝试将新项目添加到数据存储时,它没有添加。但是它接受我使用 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>
dstore.add
方法returns一个承诺,不会立即添加。
add(object, [directives]) - This creates an object, and throws an error if the object already exists. This should return a promise for the newly created object.
您需要等待添加完成。
validatingMemory2.add({ "id": "two",
"positionX": 300,
"positionY": 400,
"moduleType": "label" }).then(function(){
var objecttwo = validatingMemory2.getSync("two");
console.log(objecttwo.positionX);
});
或者使用sync方法同步添加
Stores that can perform synchronous operations may provide analogous methods for get, put, add, and remove that end with Sync to provide synchronous support. For example getSync(id) will directly return an object instead of a promise. The dstore/Memory store provides Sync methods
validatingMemory2.addSync({ "id": "two", "positionX": 300, "positionY": 400, "moduleType": "label" });