0

該項目使用marionette-rails,backbone-on-rails,select2-railsport to BackboneForms來提供多選表單字段。選擇選項可供用戶使用。它們含有的期權總榜單收集檢索: 如何在BackboneForms架構中初始化rails-select2的選擇?

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' 
      } 
      } 
     } 
     }; 
    } 

    }); 
}); 

難道我在options.value正確初始化valueinitSelection怎麼不叫?我從文檔中複製了該功能 - 對於我的情況可能不完整。沒有一個產品的ID爲35顯示爲選擇。

回答

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]); 
1

您可以在setValue中使用value函數(http://ivaynberg.github.io/select2/#documentation)。我個人建議更換你使用這個backbonme表單插件:https://gist.github.com/powmedia/5161061 有一個關於自定義編輯器螺紋:https://github.com/powmedia/backbone-forms/issues/144

+0

感謝您的文檔提示。我明白我必須將選項設置爲'options:{value:[3,5]}'。我應該在哪裏提供'initSelection'?我是否需要擴展[骨幹形式編輯器](https://gist.github.com/Integral/5156170)?請添加一些代碼片段。 – JJD

+0

我可以看到你如何在'gist:5161061](https://gist.github.com/powmedia/5161061)從'schema'加載'config'。但是,你可以指定你如何定義'options.value'和resp。 'config.value'和'initSelection'如果需要?請添加一些代碼。 – JJD

+0

我猜'initSelection'屬於文檔中的選項:*「請注意,爲了使用此方法,您必須在選項中定義initSelection函數...」* – JJD