2015-05-29 79 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。正如您在代码中看到的那样,只有在不存在(未定义)时才会创建区域的状态。如果我错了,你可以给我一个代码示例,它可以节省我的时间:) –