Я делаю привязку модели с помощью backbone.stickit. Как я могу связать предварительно заполненный выбор с моделью?

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

Это мой HTML

<div id="main">
    <form id="formulario">
        <input id="test1" type="text" />
        <select id="test2">
            <option value="0">a</option>
            <option value="1">b</option>
        </select>
    </form>
    <div id="value-test1"></div>
    <div id="value-test2"></div>
</div>

Это рабочий пример, основанный на документации, но не то, что мне нужно

var Model = Backbone.Model.extend({});
var View = Backbone.View.extend({
  el: $('#main'),
  bindings: {
    '#test1': 'test1',
    '#value-test1': 'test1',
    '#test2': {
      observe:'test2',
      selectOptions: {
        collection: function() {
          return [
            {value: 0, label:'a'},
            {value: 1, label:'b'}
          ];
        }
      }
    },
    '#value-test2': 'test2'
  },
  render: function() {
    this.stickit();
  }
});

var model = new Model({test1: 'test', test2: 0});
var view = new View({model: model}).render();

http://jsfiddle.net/camilosw/nDjHh/

Я пытался получить значения параметра из выбора в конфигурации привязки с помощью jquery, но не работает

var Model = Backbone.Model.extend({});
var View = Backbone.View.extend({
  el: $('#main'),
  bindings: {
    '#test1': 'test1',
    '#value-test1': 'test1',
    '#test2': {
      observe:'test2',
      selectOptions: {
        collection: function() {
          options = $("#test2 option").map(function(){
            return {value: this.value, label: this.text};
          }).get();
          return options;
        }
      }
    },
    '#value-test2': 'test2'
  },
  render: function() {
    this.stickit();
  }
});

var model = new Model({test1: 'test', test2: 0});
var view = new View({model: model}).render();

http://jsfiddle.net/camilosw/2EYV7/2

Это сработало, но я думаю, что это будет беспорядок на формах с большим выбором

window.options = $("#test2 option").map(function(){
    return {value: this.value, label: this.text};
}).get();

var Model = Backbone.Model.extend({});
var View = Backbone.View.extend({
  el: $('#main'),
  bindings: {
    '#test1': 'test1',
    '#value-test1': 'test1',
    '#test2': {
      observe:'test2',
      selectOptions: {
        collection: function() {
          return window.options;
        }
      }
    },
    '#value-test2': 'test2'
  },
  render: function() {
    this.stickit();
  }
});

var model = new Model({test1: 'test', test2: 0});
var view = new View({model: model}).render();

http://jsfiddle.net/camilosw/Y3aEF/1

Каков наилучший способ привязать предварительно заполненный выбор к модели?

Я пробовал только с backbone.stickit, проще с другой библиотекой?

1 ответ

Решение

Stickit фактически связывает значения как данные с параметрами выбора вместо использования атрибута value html. Это объясняется тем, что в богатых приложениях часто требуется использовать разные типы данных для значений параметров. Например, вы можете захотеть, чтобы опция представляла Объект JavaScript или Массив, который не является простым значением для сериализации в атрибут html; или вы можете захотеть присвоить значение атрибута Number 2, но из-за приведения типов при сохранении в качестве атрибута оно будет преобразовано в строку "2". Кроме того, поскольку Stickit собирается анализировать / владеть параметрами выбора, имеет смысл разрешить Stickit отображать параметры вместо того, чтобы обрабатывать / обрабатывать их в двух местах (не говоря уже о том, что повторение в шаблоне ужасно).

Тем не менее, этот запрос достаточно распространен, и я убежден, что он поддерживает предварительно выбранные опции выбора. Можете ли вы открыть новый выпуск, и я получу кое-что о мастере в ближайшие пару дней?

РЕДАКТИРОВАТЬ: Над этим сейчас активно работают.

Другие вопросы по тегам