私はKnockout.jsで私の最初の措置をとって、未払いの請求書のインテレストを計算するための(かなり複雑な)フォームを作成し、部分支払い、費用、契約上のペナルティを念頭に置いています。ノックアウトjs:新しい入力名をユニークにする
計算はPHPで処理されます.PHPで、JSでの経験は豊富です。ノックアウトは、新しいフォームフィールドを追加するダイナミクスを処理し、最も複雑な状況でも柔軟に使用できるようにします。
正しく、私はPHPにポストを介して3つの多次元配列を提供されるデータを抽出することができるようにする:
- 請求書[$ i]と[名] /請求書[$ i]の[量] /請求書[$ i]の[日付]/...
- 支払い[$ j]と[名]/...
- コスト[$ k]の[名前]/...
問題私はJSで解決できないようですが、新しいフォーム要素はKnockout.jsによって生成され、一意の麻痺私は固有名結合に見てきた
data-bind="attr:{name: someFunctionToGiveUniqueName}"
erが(私は推測)で割り当て可能でなければなりませんが、私は3 uniqueNamesを持っている必要があり、私は構造化されたデータを保持するために結果の名前をカスタマイズすることができるはずです。
これは私のViewModel(と、それはそれほどユニークでないネーミング・オブ・inputfieldsを除き、動作します)です:
<script type="text/javascript">
// Overall viewmodel
function ViewModel() {
var self = this;
// Data
self.Hoofdsom = ko.observableArray();
self.Betaling = ko.observableArray();
self.Kost = ko.observableArray();
self.hsBeschr = ko.observable();
self.hsBedrag = ko.observable();
self.hsVerval = ko.observable();
self.hsIntr = ko.observable();
self.hsIntrType = ko.observable();
self.hsSchadeType = ko.observable();
self.hsSchadePerc = ko.observable(10);
self.hsSchadeMin = ko.observable(0);
self.hsSchadeMax = ko.observable(1500);
// Initial State
self.Hoofdsom.push("new");
// Operations
self.addHoofdsom = function() {
self.Hoofdsom.push(self.Hoofdsom().length);
}
self.remHoofdsom = function(hfd){
self.Hoofdsom.remove(hfd);
}
self.addBetaling = function() {
self.Betaling.push(self.Betaling().length);
}
self.remBetaling = function(bet){
self.Betaling.remove(bet);
}
self.addKost = function() {
self.Kost.push(self.Kost().length);
}
self.remKost = function(kos){
self.Kost.remove(kos);
}
}
// Apply bindings
ko.applyBindings(new ViewModel());
</script>
ありがとうございました。それは行く方法かもしれませんが、それはいくつかの微調整が必要です:私は3つのユニークなbindingHandlerを作成しましたが、それらは適用されるたびに本当にユニークです。私の形式では、3つのグループのデータを1つの配列にまとめたいと考えています。ですから、attr-bindingで呼び出せる変数にelement.name-valueを格納することはできますか?そのようにして、最初のformfieldでuniqueName-bindingを使用し、同じ配列でグループ化する他のformfieldsでattr-bindingを使用することができます。これまでのコードを表示するjsFiddleを作成しました:http:// jsfiddle.net/zenlord/WUDdG/ – zenlord
私はこの問題で多少苦労しましたが、更新されたKnockout(v2.1.0)ではforeach-itemごとに作成されるindex()-varで簡単に解決できます。 – zenlord