2015-05-29 178 views
0

我正在使用Marionette區域來顯示基於用戶無線電輸入的模板:(文本/文件)。 這裏是我的ItemView控件Marionette防止區域破壞

var fileTemplateView = Marionette.ItemView.extend({ 
     template : "#file-upload-template" 
    }); 

和區域定義爲

regions : { 
      composeRegion : "#compose-region", 
     } 

和事件聲明爲

events : { 
    "click #msg-input-type input:radio" : "changedRadio" 
    } 

和事件觸發功能

changedRadio : function(evt) { 
      var self = this; 
      var checkedObject = evt.currentTarget; 
      console.log('Radio Change Event'+checkedObject.value); 

      if (checkedObject.value === "file") { 
       if (self.fileView === undefined) { 
        self.fileView = new fileTemplateView(); 
       } 
       this.composeRegion.show(self.fileView, { preventDestroy: true }); 
      } else if (checkedObject.value === "text") { 
       if (self.textView === undefined) { 
        self.textView = new textTemplateView(); 
       } 
       this.composeRegion.show(self.textView, { preventDestroy: true }); 
      } 

但preventDestroy方法可能無法按照在每次發生無線事件時重置模板的地方定義的方式工作。

您的幫助表示讚賞。

+0

您是否試圖在不顯示視圖的情況下向該區域顯示視圖? – Vic

+0

@Vic Yup。我的案例其中1)TextBox和2)UploadFile是可用的選項,如果用戶從一個無線電選項切換到另一個無線電選項並返回,他不應該像在普通html中那樣鬆動文本輸入或上傳文件路徑(名稱)。 –

+0

我有一個類似的問題之前,請參閱:http://stackoverflow.com/questions/19496732/backbone-marionette-region-show-without-render – Vic

回答

0

preventDestroy選項可防止被交換的視圖被銷燬。這並不意味着下次顯示時不會重新渲染。確保您保存視圖的狀態,以便下次可以正確重構視圖。

+0

上附加/分離視圖的$ el,謝謝@Jacob。正如您在代碼中看到的那樣,只有在不存在(未定義)時纔會創建區域的狀態。如果我錯了,你可以給我一個代碼示例,它可以節省我的時間:) –