2010-10-27 2 views
0

Я только начал исследовать mvc на стороне клиента javascript (JavaScript MVC). Все выглядело великолепно, пока я не получил форму отправки :) Просмотр части не сделает этого, это просто. Событие добавляется в контроллер, поэтому контроллер является хорошим местом для проверки данных формы, но я не уверен, что я хочу, чтобы мой контроллер знал конкретный адрес сервера (должен был опубликовать мою форму), поэтому было бы здорово иметь метод в модели, но тогда я не хочу, чтобы моя модель узнала о моей форме (которая на самом деле является структурой html ...).javascript mvc и ajax form submit

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

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 
     ... 
    } 
} 

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

ответ

2

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

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

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

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