2013-06-18 47 views
0

我正在嘗試使用Backbone.Marionette來構建應用程序。應用程序通過REST調用獲取其數據。Backbone Marionette中的表單選擇框

在這個應用程序,我創建了包含以下字段的模型:

  • ID
  • 語言

我還創建了一個ItemView控件包含完整的模型。我使用的模板是這樣的:

<form> 
      <input id="model-id" class="uneditable-input" name="id" type="text" value="{{id}}"/> 
      <input id="model-name" class="uneditable-input" name="name" type="text" value="{{name}}" /> 
      <select id="model-language" name="language"></select> 
      <select id="model-type" name="type"></select> 
      <button class="btn btn-submit">Save</button> 
    </form> 

(我使用Twig.js的渲染模板)

我能成功地獲取模型的數據並顯示視圖。

我現在想要做的是填充模型語言和模型類型的選擇框和選項。語言和類型字段也會被REST調用的結果限制爲值,即,我有一個語言列表和一個通過REST提供給我的類型列表。

我正在考慮擁有兩個集合,一個用於語言,一個用於類型,爲每個集合(即viewLanguageSelectOptions和viewTypeSelectOptions)創建一個視圖,以上述模板的形式呈現選項。我不確定的是,如果這是可能的,或者在哪裏做選項填充以及如何根據模型中的數據設置選定的選項。即使通過查看可用的示例和文檔,我也不清楚哪種Marionette視圖類型最適合實現。也許我在看錯方向。

換句話說,我現在卡住了,我想知道你們任何一位骨幹用戶都有建議或解決方案。希望你能幫助!

回答

3

創建一個選擇我認爲不需要在你描述的場景中,因爲我假設你的語言列表不會經常變化,唯一的porpouse是提供一個列表從哪裏挑選一個值,所以你可以填充你的選擇在你的視圖的onRender或initializace函數使用jQuery。

您可以對您的REST服務的調用和渲染視圖前拿到名單,這名單傳遞給視圖選項和填充你的選擇上的OnRender功能

var MyItemView = Backbone.Marionette.ItemView.extend({ 
    initialize : function (options) { 
     this.languages = options.languages; 
     this.typeList = options.typeList; 
    }, 
    template : "#atemplate", 
    onRender : function() { 
     this.renderSelect(this.languages, "#languagesSelect", "valueofThelist"); 
     this.renderSelect(this.typeList, "#typesSelect", "valueofThelist") 
    }, 
    renderSelect :function (list, element, value) { 
     $.each(list, function(){ 
      _this.$el.find(element).append("<option value='"+this[value]+"'>"+this[value]+"</option>"); 
     }); 
    } 
}) 


var languagesList = getLanguages(); 
var typeList = getTypesList(); 
var myItemView = new MyItemView({languages:languagesList,typeList :typeList }); 

希望這有助於。

+2

謝謝!我自己想到了這一點,並打算在這裏寫下答案:)無論如何,我完全是這樣做的:我已經分離了控制器部分和視圖部分的文件。在控制器部分,我向REST服務器請求語言和類型。在成功獲取後,我將它們作爲選項傳遞給視圖。在視圖的serializeData處理程序中,我將選項插入要在模板呈現中使用的數據中。檢查是否選擇了正確的選項是通過比較所選選項和渲染選項在模板中處理的。 – Vanderstaaij

相關問題