例 jsFiddle
部分的に機能し、ダイアログをレンダリングし、N 件の送信を追加して 1 件を削除できますが、編集はできません... まだ
サブ質問のリストを表示する jQuery UI ダイアログを表示するカスタム バインディング ハンドラーを作成しました。これらが完了し、 [変更を保存] ボタンが押されると、observable using のコピーがko.toJS(observable)
取得され、それが配列に追加されます。その後observableArray
、このようにビュー モデルに追加されます。
var submission = [];
viewModel.selectedQuestion().subQuestions().forEach(function (sq) {
submission.push(ko.toJS(sq));
});
viewModel.submissions.push(submission);
このように特定の送信を削除する関数をビューモデルに添付しました。
viewModel.deleteSubmission = function (submission) {
var index = 0;
viewModel.submissions().forEach(function (s) {
if (s === submission) {
viewModel.submissions.splice(index, 1);
}
index++;
});
};
しかし、提出物を編集して、特定のモデルでダイアログを再度レンダリングする方法に少し困惑しています。私はko.renderTemplate
このルートを認識しており、現在実験していますがko.toJS
、提出配列に追加しているコピーが Knockout の機能を妨げていると思います。
誰かが私を正しい方向に押しやる指針を持っていますか? 私は現在、ノックアウトで簡単なエディター パターンを読んでいるので、編集ダイアログをキャンセルするときにすべてを処理できると確信commit
しrollback
ています。保存された送信を編集する方法がわかりません。
試行 1: jsFiddle
という 2 番目のカスタム バインディング ハンドラーを作成し、ビュー モデルにeditSubmissionDialog
追加しました。selectedSubmission
これはダイアログを開いていますが、ko.toJS
(私が思うに)ダイアログに渡されたアイテムは観察できません。また、同じダイアログを使用する別のカスタム バインディング ハンドラーを本当に作成する必要がありますか?