2013-06-18 3 views
0

Я пытаюсь использовать Backbone.Marionette для создания приложения. Приложение получает свои данные через вызовы REST.Поле выбора формы в Магионте магии

В этом приложении я создал модель, которая содержит следующие поля:

  • идентификатор
  • имя
  • язык
  • типа

Я также создал ItemView, который содержит полная форма для модели. Шаблон я использую это:

<form> 
      <input id="model-id" class="uneditable-input" name="id" type="text" value="{{id}}"/> 
      <input id="model-name" class="uneditable-input" name="name" type="text" value="{{name}}" /> 
      <select id="model-language" name="language"></select> 
      <select id="model-type" name="type"></select> 
      <button class="btn btn-submit">Save</button> 
    </form> 

(я использую Twig.js для рендеринга шаблонов)

Я могу успешно получить данные модель, и отобразить вид.

Теперь я хочу заполнить поля выбора для языка модели и типа модели с параметрами. Поля языка и типа должны быть ограничены значениями в результате вызовов REST, т. Е. У меня есть список языков и список типов, предоставляемых мне через REST.

Я рассматриваю наличие двух коллекций, один для языка и один для типа, создающий представление для каждого (то есть viewLanguageSelectOptions и viewTypeSelectOptions), который отображает параметры в форме шаблона, указанного выше. Я не уверен, что это возможно, или где нужно заполнить параметры и как установить выбранную опцию на основе данных из модели. Для меня это не совсем понятно, даже если посмотреть на примеры и доступные документы, которые, по мнению Marionette, могут быть лучше всего реализованы. Возможно, я смотрю не в ту сторону.

Другими словами, я застрял прямо сейчас, и я задаюсь вопросом, кто из вас встречает Магнетает Магнетет пользователей есть предложения или решения. Надеюсь, ты поможешь!

ответ

3

Создать представление для выбора Выберите, на мой взгляд, не нужно в описываемом вами сценарии, поскольку Im предполагает, что ваш список языков не будет меняться часто, а единственная porpouse - предоставить список, из которого выбрать значение, чтобы вы могли заполнить свои выборки в функции onRender или initializace вашего представления, используя jquery.

вы можете сделать вызовы на службу REST и получить списки перед визуализацией Вашего мнения и передать этот список к просмотру в качестве опции и заполнить ваш выбираешь на функции OnRender

var MyItemView = Backbone.Marionette.ItemView.extend({ 
    initialize : function (options) { 
     this.languages = options.languages; 
     this.typeList = options.typeList; 
    }, 
    template : "#atemplate", 
    onRender : function() { 
     this.renderSelect(this.languages, "#languagesSelect", "valueofThelist"); 
     this.renderSelect(this.typeList, "#typesSelect", "valueofThelist") 
    }, 
    renderSelect :function (list, element, value) { 
     $.each(list, function(){ 
      _this.$el.find(element).append("<option value='"+this[value]+"'>"+this[value]+"</option>"); 
     }); 
    } 
}) 


var languagesList = getLanguages(); 
var typeList = getTypesList(); 
var myItemView = new MyItemView({languages:languagesList,typeList :typeList }); 

Надеется, что это помогает.

+2

Спасибо! Я подумал об этом сам и собирался написать ответ здесь также :) Во всяком случае, я сделал именно это: я разделил файлы для части контроллера и части представления. В части контроллера я запрашиваю языки и типы с сервера REST. После succesfull fetch я передаю их как опции для представления. В обработчике serializeData представления я вставляю параметры в данные, которые будут использоваться в рендеринге шаблона. Проверка того, выбран ли правильный вариант, обрабатывается самим шаблоном, сравнивая выбранную опцию с отображаемой опцией. – Vanderstaaij

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