0

该项目使用marionette-railsbackbone-on-railsselect2-rails和这个到 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从来不叫?我从文档中复制了该功能-对于我的情况可能不完整。没有具有 ID 的产品,35显示为选择。

4

2 回答 2

1

您可以. value_ 我个人建议你使用这个 backbonme-forms 插件:https ://gist.github.com/powmedia/5161061 有一个关于自定义编辑器的帖子:https ://github.com/powmedia/backbone-forms/issues/144setValue

于 2013-07-14T09:08:04.477 回答
1

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]);
于 2013-07-26T07:25:03.480 回答