Как инициализировать выделение для 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