0

次のような「 JSONスキーマ」を定義するためのクイックツールを作成するのが好きです。

{
      "type": "object",
      "properties": {
          "myFirstProperty": {
              "type": "integer"
          }
      },
      "title": "MySchema",
      "description": "some description"
    }

こちらのプレビューをご覧ください:http ://jsfiddle.net/franquis/djRFN/4/embedded/result/

ここのコードを参照してください:http: //jsfiddle.net/franquis/djRFN/4/

単純なフォームを使用して、「ng-model」属性を使用して「 name」、「description 」を定義できますが、スキーマの「 properties」定義に関しては、いくつかの問題があります:)

私がしたことは:

  1. 最初に「$scope.newProperties」配列を作成しました。この配列には、スキーマ「$scope.schema」に追加したいプロパティが格納されています。
  2. 「 $scope.schema.properties」に新しいプロパティを追加するために、この配列にリスナーを追加しました

私の問題:

新しいプロパティを作成したときに、新しいキーの名前(つまり、ホスト名)を入力すると、多くの新しいプロパティが作成されます...以下を参照してください。

{
      "type": "object",
      "properties": {
         "h": {},
         "ho": {},
         "hos": {},
         "host": {},
         "hostn": {},
         "hostna": {},
         "hostnam": {},
         "hostname": {
            "type": "integer"
         }
      },
      "title": "MySchema",
      "description": "some description"
    }

この動作は" $watch(" myva "、function(a、b){}、true); "関数が原因であることがわかっていますが、他に何を成功させることができますか?

ご協力いただきありがとうございます!

4

1 に答える 1

3

$scope.schema.propertiesアイテムを繰り返す前にリセットします。

$scope.$watch(function(){return $scope.newProperties;},function(items,b){
    $scope.newSchema.properties = {};
    angular.forEach(items, function(obj){
        if(angular.isDefined(obj.key)) {
            var key = obj.key, type = obj.type, name = obj.name;
            $scope.newSchema.properties[key] = {
                "name": name,
                "type": type
            };
        }
    });
},true);

$scope.schema注文と同期を維持するための最良の方法です$scope.newProperties

于 2013-01-22T11:15:37.443 に答える