2015-09-21 5 views
1

Я новичок в KnockoutJS, и я хотел бы сериализовать текущую форму, но когда я console.log сериализует форму, она пуста.Knockout.js: как получить текущую форму?

Как я могу обратиться к текущей форме?

Вот мой DOM:

<form data-bind="submit: onSubmit"> 
    <input type="text" data-bind="value: firstName"> 
    <input type="text" data-bind="value: lastName"> 
    <button data-bind="click: capitalizeLastName">Go caps</button> 
    <input type="submit" value="submit"> 
</form> 

Вот код JS:

$(document).ready(function() { 
    function AppViewModel() { 
     var self = this; 
     self.firstName = ko.observable("Bert"); 
     self.lastName = ko.observable("Bertington"); 
     self.fullName = ko.computed(function() { 
      return self.firstName() + " " + self.lastName(); 
     }, self); 
     self.capitalizeLastName = function() { 
      var currentVal = self.lastName();  // Read the current value 
      self.lastName(currentVal.toUpperCase()); // Write back a modified value 
     }; 

     self.onSubmit = function(form) { 
//   alert(self.firstName()) ; 
      console.log($(form).serialize()) ; 
     } 
    } 

    // Activates knockout.js 
    ko.applyBindings(new AppViewModel()); 
}); 
+1

Это звучит как проблема [XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem) - почему вы хотите сериализовать форму, когда данные должны все уже присутствуют в вашей модели с нокаутом? Какова ваша конечная цель здесь? –

+0

Я работаю с фреймворком PHP, в котором я размещаю сериализованную форму. Затем сериализованная форма автоматически воссоздается по методу ajax сервера. Вот почему я хочу сериализовать текущую форму и не получить доступ непосредственно к viewmodel. –

ответ

1

Вы правильно в соответствии с текущей формы в вашем коде: он получает передается в качестве первого аргумента submit обработчик привязки данных, однако только input с атрибутом name сериализуются методом jQuery.serialize(). Добавьте name атрибуты в свои поля, и он будет работать.

От https://api.jquery.com/serialize/ (полужирный мой)

Примечание: Только "успешные управления" упорядочиваются в строку. No отправить значение кнопки сериализуется, так как форма не была отправлена ​​ с помощью кнопки. Для значения элемента формы, которое должно быть включено в сериализованную строку , элемент должен иметь атрибут имени. Значения от флажков и переключателей (входы типа «радио» или «флажок») включены только в том случае, если они отмечены. Данные из элементов выбора файла не сериализованы.

Однако я бы посоветовал вам обратиться к комментариям @James Thorpe в комментариях и получить значения формы из наблюдаемых значений Knockout.js.

+0

Вы правы. Это проблема jQuery, а не KO. –

Смежные вопросы