Как инициализировать выделение для rails-select2 в схеме BackboneForms?

В проекте используются марионеточные рельсы, магистраль на рельсах, select2-рельсы и этот порт для BackboneForms для предоставления поля формы с несколькими выборками. Опции выбора доступны для пользователя. Они извлекаются из коллекции, содержащей полный список параметров:

MyApp.module("Products", function(Products, App, Backbone, Marionette, $, _) {

  Products.CustomFormView = Products.CustomView.extend({

    initialize: function(options) {
      this.model.set("type", "Product");
      Products.EntryView.prototype.initialize.apply(this, arguments);
    },

    schemata: function() {
      var products = this.collection.byType("Product");
      var productTypes = products.map(function(product){
        return {
          val: product.id,
          label: product.get("name")
        };
      });

      return {
        productBasics: {
          name: {
            type: "Text",
            title: "Name",
            editorAttrs: {
              maxLength: 60,
            }
          },
          type: {
            type: 'Select2',
            title: "Product type",
            options: {
              values: productTypes,
              value: [3, 5],
              initSelection: function (element, callback) {
                var data = [];
                $(element.val().split(",")).each(function () {
                  data.push({id: this, text: this});
                });
                callback(data);
              }
            },
            editorAttrs: {
              'multiple': 'multiple'
            }
          }
        }
      };
    }

  });
});

Я инициализирую value правильно в options.value? Как идет initSelection никогда не называется? Я скопировал функцию из документации - она ​​может быть неполной для моего случая. Ни один из продуктов с идентификаторами 3 а также 5 отображается как выбор.

2 ответа

Решение

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

Лучший способ инициализации выбора - использование setValue после того, как форма создана. Вот упрощенный пример, основанный на коде в вашем примере.

var ProductForm = Backbone.Form.extend({
  schema: {
    type: {
      type: 'Select2',
      title: "Product type",
      options: {
        values: productTypes,
      },
      editorAttrs: {
        'multiple': 'multiple'
      }
    }
  });

var form = new ProductForm({
  model: new Product()
}).render();

form.setValue("type", [3, 5]);

Ты можешь использовать value функция ( http://ivaynberg.github.io/select2/) в setValue, Я лично рекомендую вам использовать этот плагин backbonme-forms: https://gist.github.com/powmedia/5161061 Существует ветка о пользовательских редакторах: https://github.com/powmedia/backbone-forms/issues/144

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