отправка формы javascript mvc и ajax - PullRequest
0 голосов
/ 27 октября 2010

Я только начал исследовать mvc на стороне клиента javascript ( JavaScript MVC ). Все выглядело великолепно, пока я не получил форму отправки :) Просмотр части не будет делать это, это просто. Событие прикреплено в Controller, поэтому Controller является хорошим местом для проверки данных формы, но я не уверен, что хочу, чтобы мой контроллер знал конкретный адрес сервера (если бы отправил мою форму), поэтому было бы здорово иметь метод в Model, но тогда я не хочу, чтобы моя Модель знала о моей Форме (которая на самом деле является HTML-структурой ...).

Что мне не хватает в концепции MVC? Я также не уверен, что хочу сериализовать мою форму в Controller, а затем передать ее в качестве параметра моей модели. На данный момент единственная опция, которую я вижу, чтобы сделать модель независимой, - это иметь структуру JavaScript (сущность), которая будет заполнена контроллером (на основе данных формы) и будет передана методу Model для сохранения на сервере. Очень упрощенный код:

Info = {
    name,
    address,
    // 15 more properties
    ...
}

InfoController = {
    ...
    onFormSubmit: function() {
       ... 
       info.name = document.getElementById("info-name").value;
       info.adress = document.getElementById("info-address").value;
       ...
       InfoModel.save( info );
    }
}

InfoModel = {
    ...
    save: function( info ) {
        // here some code to setialize info object 
        // send it to server
        ...
    }
}

Но это делает мой код слишком сложным (по сравнению с простой серизлизацией форм некоторыми сторонними фреймворками и просто отправкой ..). Какой правильный выбор?

1 Ответ

2 голосов
/ 07 марта 2011

Просто отвечаю на мой вопрос. Краткий ответ - да, я был прав с моими предположениями;) Я взглянул на JavaScriptMVC и заметил одну простую вещь, которую я пропустил: можно разработать простую функцию, которая будет создавать объект javascript на основе формы (у них есть функция с именем formParams, которая выполняет этот тип преобразования). Таким образом, мой контроллер упрощается:

InfoController = {
    ...
    onFormSubmit: function() {
       ... 
       var info = $infoForm.formParams();
       InfoModel.save( info );
    }
}

Теперь это выглядит не так уж сложно, и его преимущество в том, что есть одно место (модель), которое знает, как сохранять данные (проверка; URL для отправки; некоторые другие вещи, такие как добавление этой сущности в «хранилище» на стороне клиента; запуск события, когда будет создано что-то новое, что-либо еще в соответствии с нашими потребностями), и если у меня будет еще одно место или поток управления для повторного выполнения этой операции, я больше не буду писать этот код, и это не зависит на презентации (это форма или просто набор входов, мастер и т. д.). Также модель становится достаточно многоразовой.

На самом деле перед использованием этого подхода у нас было нечто подобное, но оно не было таким структурированным (среди разных презентаций для моего приложения, которые могут запускать javascript).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...