我一直在做一些簡單的淘汰賽的事情,但這一個感覺更復雜。 客戶希望能夠通過下拉菜單控制表單中訂單行的數量(我問他們爲什麼不想要一個常規的添加按鈕,但他們表示這會讓他們更好地瞭解一切都已填滿出...)。Knockout.js - 從擴展器或其他方式改變其他observables從擴展或其他方式做類似
我有一個可觀察的持有下拉的值和一個observableArray來保存訂單行,但我不得不確認選擇的目的是當新值小於以前。
因此,我開始在互聯網上尋找技巧和竅門,如何實現這一目標。 首先我發現this "confirmable" extender。它幫助我顯示一個確認對話框,如果他們選擇的行數小於先前的值,但是我發現無法與視圖模型中的其他觀察者交互。
於是我Google多了一些,發現the first answer from Michael Best here。使用「subscribeChanged」函數,我現在可以(在可確認的擴展器完成其部分之後)將行添加或移除到可觀察的訂單行數組中。
但是,我希望有一些更好的方法來完成這個任務,以便在多個地方沒有幾乎精確的代碼。因爲現在我在擴展
if (!isValidateInteger(current) && isValidateInteger(newValue)) {
target(newValue);
// TODO: Add rows to vm.orderRows so the count reflects newValue
}
這個代碼subscribeChanged功能有這樣的代碼
if (!isValidateInteger(current) && isValidateInteger(newValue)) {
// NOTE: Add rows to vm.orderRows so the count reflects newValue
difference = (newValueInt - currentInt);
message += '<br />Add ' + difference + ' row(s).';
for (var i = 0; i < difference; i++) {
vm.orderRows().push(new OrderRow());
}
vm.orderRows.valueHasMutated();
}
我已經與我今天的代碼的摘錄放在一起this fiddle。
我知道一些if語句不需要在那裏,但它們目前只是爲了調試目的。當功能完成和測試時,我會考慮刪除哪些內容,但是歡迎任何指針(即使是與問題無關的指針)。
由於提前,路德維希
但是,如果您點擊取消,下拉菜單仍然保持「新值」。如果您選擇2,則會添加2行。然後,您選擇1並單擊取消,即使沒有刪除行,下拉列表仍將顯示1。這是接近我正在尋找tho :) –
編輯回答。事實上,即使可觀察值的值沒有改變,選擇也會保持其新值。在這種情況下,你可以調用'vm.numberOfOrderRows.valueHasMutated();'。 –
我喜歡這個答案。保持請求的功能並刪除1個步驟。感謝您的快速幫助 –