RESTAPIからのJSON配列があります。Knockoutマッピングプラグインを使用して配列を処理し、JSONを事前設定されたフォーム値にロードしています(ユーザーが以前にフォームに値を追加した場合-Knockout配列をテストするためのデータがあります)。このフォームは基本的に、入力を含むdivブロックを追加または削除するため、ユーザーは「作業」エクスペリエンスを追加/削除できます。
私の問題は、プラグインが配列をマップする方法を解読しようとすることです。配列内の行の特定の値(id)を見つけようとしているので、それを変数として追加して、APIにその特定の行を削除するように指示できます。Knockoutにhtmlの行の値を明示的に出力させることはできますが、それ以外の方法でそれをキャプチャする方法を理解することはできません。テンプレート「foreach」には、「remove:」を参照するボタンがあり、配列から値をキャプチャしようとして立ち往生しています。
たとえば、HTMLの場合:
これにより、「作業」オブジェクトの2つの行が問題なく出力されます。
<span data-bind="text: ko.mapping.toJSON(workModel.work())"></span>
[{"id":"1","schoolID":"2","place":"","position":"Science Teacher","description":"I worked at ASD for 1 year as a Science teacher.","start":"2011","end":"2012","profileID":"91"},{"id":"2","schoolID":"1","place":"American School of Taiwan","position":"Science Guy","description":"I was just another science guy","start":"2008","end":"2011","profileID":"91"}]
これにより、配列の最初の行と項目のIDが出力されます。
<span data-bind="text: ko.mapping.toJSON(workModel.work()[0].id)"></span>
"1"
しかし、JavaScriptでは、foreachテンプレートによって生成された削除ボタンをクリックすると...
gone = function(work) {
alert(ko.mapping.toJSON(workModel.work(this).id));
}
Firebugでこのエラーが発生すると、UIがリロードされ、クリックしたテンプレートブロックがドロップアウトされます。
Unable to parse bindings. Message: TypeError: workModel.work()[0] is undefined; Bindings value: text: ko.mapping.toJSON(workModel.work()[0].id)
ただし、上記のアラートを明示的なステートメントに置き換えると、次のようになります。
gone = function(work) {
alert(ko.mapping.toJSON(workModel.work()[0].id));
}
正しい値の「1」をもう一度取得します。コードの「this」の側面に関係していることは知っていますが、配列から特定の値をキャプチャできるように、マッピングプラグインが何をしているのかわかりません...意味がありますか?どんな助けでも大歓迎です。