2016-08-23 12 views
0

データストアに新しいアイテムを追加しようとすると、そのアイテムは追加されません。しかし、私はsetDataを使って設定したデータ項目を受け入れ、値を取得したりプロパティを監視するなど、オブジェクトを操作することができます。dstore add()データストアに新しいアイテムを追加しない

データストアにアイテムを追加するにはどうすればよいですか?

私のコードは以下の通りです。

<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

dstore.addメソッドは約束を返し、直ちに追加しません。

add(オブジェクト、[指示文]) - これはオブジェクトを作成し、オブジェクトがすでに存在する場合はエラー をスローします。これにより、新しく作成されたオブジェクト の約束が返されます。

追加が完了するまで待つ必要があります。

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

同期メソッドを使用して同期します。同期操作を実行することができ

店舗は、取得のための類似 方法を提供置く、追加、および 同期のサポートを提供するために同期してその終了を削除することができます。たとえば、getSync(id)は約束の代わりに オブジェクトを直接返します。 dstore /メモリストアはディレクティブで何同期 方法

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

を提供しますか? – erotavlas

+0

見積もりはdstoreのドキュメントからの引用です。 'options'や' store.PutDirectives'の詳細はここにありますhttps://github.com/SitePen/dstore/blob/master/Store.js –

関連する問題