this JSON editorのコードを理解してそれを変更したいと思います。我々はすでにng-click="addItem(child)"
Add
ボタンの持っている与えられた、JSONエディタにテーブルタイプを追加
var switchTemplate =
'<span ng-switch on="getType(val)" >'
... ...
+ '<span ng-switch-when="Boolean" type="boolean">'
+ '<input type="checkbox" ng-model="val" ng-model-onblur ng-change="child[key] = val">'
+ '</span>'
... ...
+ '</span>';
// display either "plus button" or "key-value inputs"
var addItemTemplate =
'<div ng-switch on="showAddKey" class="block" >'
+ '<span ng-switch-when="true">';
if (scope.type == "object"){
// input key
addItemTemplate += '<input placeholder="Name" type="text" ui-keyup="{\'enter\':\'addItem(child)\'}" '
+ 'class="form-control input-sm addItemKeyInput" ng-model="$parent.keyName" /> ';
}
addItemTemplate +=
// value type dropdown
'<select ng-model="$parent.valueType" ng-options="option for option in valueTypes" class="form-control input-sm"'
+ 'ng-init="$parent.valueType=\''+stringName+'\'" ui-keydown="{\'enter\':\'addItem(child)\'}"></select>'
// input value
+ '<span ng-show="$parent.valueType == \''+stringName+'\'"> : <input type="text" placeholder="Value" '
+ 'class="form-control input-sm addItemValueInput" ng-model="$parent.valueName" ui-keyup="{\'enter\':\'addItem(child)\'}"/></span> '
+ '<span ng-show="$parent.valueType == \''+numberName+'\'"> : <input type="text" placeholder="Value" '
+ 'class="form-control input-sm addItemValueInput" ng-model="$parent.valueName" ui-keyup="{\'enter\':\'addItem(child)\'}"/></span> '
// Add button
+ '<button type="button" class="btn btn-primary btn-sm" ng-click="addItem(child)">Add</button> '
+ '<button type="button" class="btn btn-default btn-sm" ng-click="$parent.showAddKey=false">Cancel</button>'
+ '</span>'
+ '<span ng-switch-default>'
// plus button
+ '<button type="button" class="addObjectItemBtn" ng-click="$parent.showAddKey = true"><i class="glyphicon glyphicon-plus"></i></button>'
+ '</span>'
+ '</div>';
私は理解していない最初の事はui-keyup="{\'enter\':\'addItem(child)\'}"
の目的である:directives.jsで
は、テンプレートを構築しようとするコードの一部があります。 ui-keyup="{\'enter\':\'addItem(child)\'}"
を削除しても、コードはまだ動作しているようです。 私が理解していない第二の事はng-change="child[key] = val"
です。key
はどこから来たのですか?
実は私は人々が表に記入し、JSONオブジェクトに追加することができるように、既存のタイプと一緒にhandsontable
タイプを追加して実現したいもの:
が全体であります私が現時点で持っているプロジェクト:plnkr、すべてのテーブル関連の変更はdirectives.js
です。 addItemTemplate
に次のコードを追加すると、上記の表が表示されます。しかし、残りの作業、つまりAdd
ボタンを押した後にJSONオブジェクトにインスタンスを追加する方法はわかりません。 thisのように、hot-id
からhandontableインスタンスのデータを取得できることに注意してください。
`+ '<span ng-show="$parent.valueType == \'' +tableName+'\'"> :
<div ng-controller="MainCtrl as ctrl"><hot-table hot-id="mytable" datarows="ctrl.db.items" height="50" width="100"></hot-table></div>'`
残りの部分は誰でも知っていますか?元のコードは、(それが再帰である)を理解するのは難しいですが、私は(私は100懸賞金を置く理由です)数日間、これで苦労してきたng-click
ながら...
テーブルテンプレートを追加しようとしている場所にjsbinリンクを追加してください。あなたの質問に答える: 'ui-keyup'は' Enter'キーが起動しているときに 'addItem'メソッドを呼び出すでしょう。 'key'は親' ng-repeat'から来ています。例えばhttps://github.com/mb21/JSONedit/blob/gh-pages/js/directives.js#L256 – sbedulin
@sbedulin私はちょうど私が持っているバージョンをアップロードしましたプランナー、そしてOPを更新しました。あなたの助けを前にありがとう。 –
このコードは非常に邪魔です。私の目は出血しています....'ui-keyup =" {\ 'enter \':\ 'addItem(child)\'} "はに応答します。と入力し、マウスで[追加]ボタンをクリックするのと同じことを行います。 'ng-change =" child [key] = val "'は即座に配列の値を更新します。 – kuhnroyal