2015-06-18 93 views
1

我有一個木偶視圖,它有一個從bootbox創建新模型的方法。現在我需要能夠從bootbox編輯模型,我如何將當前模型數據傳遞給框? 這是我的一些當前的代碼:如何通過Handlebars.js將Backbone.js模型數據傳遞給Bootbox?

Module.Views.Chaptersx = Marionette.CompositeView.extend({ 
    template: Module.Templates['documents/create/course/chapter/index'], 
    childView: Module.Views.ChapterItemx, 
    childViewContainer: "#chaptersCollection", 
    events: { 
     'click .chapters-create': 'create', 
     //'click #uploadFilesChapters': 'startUpload' 
    }, 

    create: function (evt) { 
     console.log('create'); 
     evt.preventDefault(); 
     var me = this; 
     var box = bootbox.dialog({ 
      show: false, 
      title: "Nueva Seccion", 
      message: Module.Templates['documents/create/course/chapter/chapterModal'], 
      buttons: { 
       success: { 
        label: "Guardar", 
        className: "btn-success", 
        callback: function() { 
         var chapterNo = $('#cn').val(); 
         var chapterName = $('#chapterName').val(); 

         var chapter = new Module.Models.Chapter({ 
          chapterNo: chapterNo, 
          chapterName: chapterName, 

         }); 
         me.collection.add(chapter); 

        } 
       } 
      } 
     }); 
     box.on("show.bs.modal", function() { 
      console.log('numbers'); 
      var number = (me.collection.size() + 1); 
      $('#cn').val(number); 
     }); 
     box.modal('show'); 


    }, 

回答

1

TL; DR - 使用模式的自定義事件或事件總線來傳遞數據。


  • 您可以在視圖,這是折衷的辦法(你搭售視圖和模型)參考this.model

  • 您可以通過事件對象的data property傳遞數據,但爲此您必須擴展一些方法並進入骨幹網的基本內容。

  • 在元件上使用data-屬性:

    <div class="chapters-create" data-cats></div> 
    
    create: function (evt) { 
        var cats = $(evt.currentTarget).data('cats'); 
        // ... 
    } 
    

    &hellip;這被認爲是不好的習慣 - 你仍然將數據綁定到DOM(或模型來查看,MVC說)。

好了,我也不喜歡上面的,因爲他們往往有高耦合 - 上的共享模式駐留在更高層次上我會用自定義事件做。

我不知道數據來自哪裏,但底線 - 在自定義事件中拍攝它,或者更好的是使用事件總線,就像marionette.js提供的那樣。

1

您需要創建另一個視圖,將其稱爲EditView或其他東西,將其渲染並將view.el作爲message選項提供給bootbox。但是,整個事情對我來說就像是一個黑客,我認爲最好是自己實現一個模態區域並管理模態。

相關問題