内部でホストされているサービスにJSONとして投稿できるオブジェクトをユーザーが作成できるHTMLページを作成したいとします(Chrome Advanced Rest Client )。ユーザーはプロパティを追加および削除できる必要があります。オブジェクトからプロパティを追加/削除するノックアウトやその他のJavaScript
各プロパティは '名前'と '値'のプロパティを持つオブジェクトのように扱われるため、モデルが正しくありません。私は、プロパティを持つオブジェクトではなく、オブジェクトの配列で終わります。ここで
は、HTMLの抜粋です。ここ
<table>
<thead>
<tr>
<th>Property Name</th>
<th>Property Value</th>
<th></th>
</tr>
</thead>
<tbody data-bind="foreach: myFieldList">
<tr>
<td><input data-bind="value: name" /></td>
<td><input data-bind="value: value" /></td>
<td><span class="removeVar" data-bind="click: removeProperty">Remove property</span></td>
</tr>
</tbody>
</table>
<p>
<span id="addVar" data-bind="click: addProperty">Add Property</span>
</p>
<textarea name="tasks" data-bind="value: ko.toJSON(myFieldList)"></textarea>
はJSです:
<script type="text/javascript">
function dynamicProperty(name, value) {
var self = this;
this.name = name;
this.value = value;
}
function fieldModel() {
var self = this;
//start with 2 empty properties
self.myFieldList = ko.observableArray([
new dynamicProperty("", ""),
new dynamicProperty("","")
]);
var noTracker = self.myFieldList.length;
self.removeProperty = function (dynamicProperty) {
self.myFieldList.remove(dynamicProperty);
}
self.addProperty = function() {
noTracker++;
self.myFieldList.push(new dynamicProperty(this.name,this.value));
}
}
ko.applyBindings(fieldModel);
</script>
私は何をテキストエリアに取得すると、このように出力されます:
[{"name":"test name 1","value":"test value 1"},{"name":"test name 2","value":"test value 2"}]
何私はこのように出力したいです:
{"test name 1":"test value 1","test name 2":"test value 2"}
これはやや些細なことではないかと心配していますが、防衛の面ではJSとKnockoutを非常に新しくしているので、あなたが提供できるヘルプは非常に高く評価されます。ありがとう。
ちょうど私が必要としたもの。私は文字列の周りに引用符を含めるように少し修正しました - string + = '"' + item.name()+ '": "' + item.value()+ '"、'; - それは私が欲しいものだけを、感謝します。 – cjashwell