2013-10-10 5 views
0

Я смотрел учебники backbone.js, но я все еще смущен тем, как я могу сохранить данные формы в новый объект, который впоследствии будет сохранен в базе данных.Данные формы backbone.js

Итак, у меня есть динамически сгенерированная форма, называемая «истина/ложь», которую пользователь заполняет, чтобы генерировать истинный или ложный вопрос. Пока, в submit, мне нужно сохранить данные формы для объекта. Надеюсь, это имеет смысл. Сейчас он показывает только один атрибут в console.log, но мне нужны отредактированные атрибуты плюс значения по умолчанию, определенные в коде. Любые советы/помощь очень ценится, и да, у меня есть RTFM

(function() { 
window.App = { 
    Models: {}, 
    Collections: {}, 
    Views: {} 
}; 

App.Models.TestTypes = Backbone.Model.extend({ 

}); 

App.Collections.TestTypes = Backbone.Collection.extend({ 
    model: App.Models.TestTypes 
}); 

App.Views.TestTypes = Backbone.View.extend({ 
    el: $('div.add-btn'), 

    events: { 
     'click button.btn-add-tf' : 'addTrueFalse', 
     'click button.btn-add-mult' : 'addMult', 
     'click button.btn-add-short' : 'addShort', 
     'click button.btn-add-essay' : 'addEssay' 
    }, 
    // event handling functions 

    addTrueFalse: function(e) { 
     e.preventDefault(); 
     this.addTrueFalseForm(); 
     this.addTrueFalsePreview(); 
    }, 

    addTrueFalseForm: function(e) { 
     $('.new-questions').append('<div class="add-question"><form action="">' + 
      '<div class="remove-btn">x</div>' + 
      '<span style="font-weight: normal;;"><em>True/False</em></span></p>' + 
      '<label for="Question_description">Question</label><br />' + 
      '<input type="text" name="question[description]" class="tf-desc" /><br />' + 
      'True <input type="radio" name="question_answer[answer]" id="question_answer[correct]" value="1" />' + 
      ' False <input type="radio" name="question_answer[answer]" id="question_answer[correct]" value="0" /><br />' + 
      '<input type="submit" value="Save" /></form>' + 
      '</div>'); 
    }, 

    addTrueFalsePreview: function(e) { 
     $('#test-preview').append("<p>Preview</p>"); 
    } 
}); 

App.Views.NewTestType = Backbone.View.extend({ 
    el: '.new-questions', 

    events: { 
     'submit': 'addTest' 
    }, 

    addTest: function(e) { 
     e.preventDefault(); 

     var addTestData = $(e.currentTarget).find('.tf-desc').val(); 

     var task = new App.Models.TestTypes({ description: addTestData }); 
     this.collection.add(task); 
     console.log(task); 
    } 

}); 

var testTypesCollection = new App.Collections.TestTypes([ 
    { 
     defaults: { 
      questions: 0, 
      type: "", 
      description: "", 
      require_review: 0, 
      max_points: 0, 
      is_bonus: 0, 
      order: 0, 
      case_sensitive: 0, 
      answer: "", 
      points: 0, 
      is_correct: 0 
     } 

    }]); 

var addTest = new App.Views.NewTestType({ collection: testTypesCollection }); 
var question = new App.Views.TestTypes({ collection: testTypesCollection }); 

})(); 
+0

Нужно ли хранить данные формы на клиенте? Пока неясно, какое отношение к форме будет к модели или коллекции, которую вы будете использовать. Вы всегда можете просто сделать прямой аякс-вызов из своего представления при отправке формы, если вам не нужно вводить данные этой формы в вашу клиентскую модель. – kinakuta

+0

Да. Данные формы предназначены для создания экзамена, и я думаю, что функция, которая позволяет рассматривать экзамен, как он создан, будет действительно полезен для моих пользователей, потому что не все из них будут технически подкованными. То, что я собираюсь, похоже на документацию по API Stripes: https://stripe.com/docs/api – visevo

+0

старый прототип, прежде чем я попробовал магистраль. Это то, что я собираюсь сделать: http://jsfiddle.net/visevo/BxgSG/ – visevo

ответ

0

Я буду использовать Backbone.Marionette «s CompositeView/CollectionView и ItemView сделать то, что вы имеете в виду.

И вам будет проще, если вы используете одну из PHP-подстановочных фреймворков для работы с Backbone.

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