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れないのですか?ドキュメントから関数をコピーしました - 私の場合は不完全かもしれません。ID3を持つ製品5はなく、選択として表示されます。

4

2 に答える 2

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 に答える
1

valueで関数 ( http://ivaynberg.github.io/select2/#documentation ) を使用できますsetValue。個人的には、この backbonme-forms プラグインを使用することをお勧めします: https://gist.github.com/powmedia/5161061 カスタム エディターに関するスレッドがあります: https://github.com/powmedia/backbone-forms/issues/144

于 2013-07-14T09:08:04.477 に答える