Я делаю первые шаги с помощью Knockout.js, чтобы сделать (довольно сложную) форму для расчета интров на неоплаченные счета-фактуры, учитывая частичные платежи, затраты и договорные штрафы.Нокаут js: создание нового имени ввода уникально
Расчеты будут обрабатываться на PHP, так как я более опытен в PHP, а затем в JS. Нокаут обрабатывает динамику добавления новых полей формы, делая форму гибкой для использования в самых сложных ситуациях.
Чтобы иметь возможность правильно извлечь данные, я буду служить три многомерные массивы через почту на PHP:
- счета [$ я] [имя]/счета [$ я] [сумма]/счет-фактура [$ я] [дата]/...
- платеж [$ J] [имя]/...
- стоимость [$ к] [имя]/...
проблема что я, похоже, не могу решить в JS, состоит в том, что новый элемент формы должен быть сгенерирован Knockout.js и что уникальный онемение эр должен быть назначаемый с (я предполагаю)
data-bind="attr:{name: someFunctionToGiveUniqueName}"
Я посмотрел в UniqueName обязывающим, но мне нужно иметь три 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>
Благодарим вас за ответ. Это может быть способ, но нужно немного подстроить: я создал три уникальных bindHandlers, но они действительно уникальны каждый раз, когда они применяются. В моей форме я хочу сделать 3 группы данных, каждая из которых в одном массиве. Итак, могу ли я сохранить значение element.name в переменной, которую я могу вызвать с привязкой attr? Таким образом, я мог бы использовать uniqueName-binding в первом поле формы и attr-привязку в других областях формы, которые я хочу сгруппировать в одном массиве ... Я сделал jsFiddle, чтобы показать мой код до сих пор: http: // jsfiddle.net/zenlord/WUDdG/ – zenlord
Я немного потрудился с этой проблемой, и с обновленным нокаутом (v2.1.0) это легко можно решить через index() - var, который создается для каждого элемента foreach ... – zenlord