2015-06-16 2 views
0

Я пытаюсь сделать создание моего нового объекта произошедшим в модуле bootbox. Как я могу получить доступ к this.collection внутри обратного вызова bootbox? Мне кажется, что _bind был бы полезен, но я не знаю, как это сделать.Backbone view 'this' context в bootbox

происходит следующее внутри Marionette.compositeView

create: function(evt) { 
    console.log('create'); 
    evt.preventDefault(); 

    var modal = bootbox.dialog({ 
     title: "Nueva Seccion", 
     message: Module.Templates['documents/create/course/chapter/chapterModal'], 
     buttons: { 
      success: { 
       label: "Guardar", 
       className: "btn-success", 
       callback: function() { 
        var chapterNo = $('#chapterNo').val(); 
        var chapterDesc = $('#chapterDesc').val(); 
        var chapter = new Module.Models.Chapter({ 
         chapterNo: chapterNo, 
         chapterDesc: chapterDesc, 
        }); 
        var sub = new Module.Models.subChapter({}); 
        chapter.get('subChapters').add(sub) 

        this.collection.add(chapter); 

       } 
      } 
     } 
    }); 

    modal.modal('show') 
}, 

ответ

2

Я обычно этот трюк, создать новую переменную (обычно само), которые держат правильное это значение, что-то вроде этого:

create: function(evt) { 
    var self = this; 
    console.log('create'); 
    evt.preventDefault(); 

    var modal = bootbox.dialog({ 
     title: "Nueva Seccion", 
     message: Module.Templates['documents/create/course/chapter/chapterModal'], 
     buttons: { 
      success: { 
       label: "Guardar", 
       className: "btn-success", 
       callback: function() { 
        alert(self.collection); 
        var chapterNo = $('#chapterNo').val(); 
        var chapterDesc = $('#chapterDesc').val(); 
        var chapter = new Module.Models.Chapter({ 
         chapterNo: chapterNo, 
         chapterDesc :chapterDesc, 
        }); 
        var sub = new Module.Models.subChapter({}); 
        chapter.get('subChapters').add(sub) 

        self.collection.add(chapter); 

       } 
      } 
     } 
    }); 

    modal.modal('show'); 
} 

Надеюсь, это поможет

+0

Вы правы, «s» - это опечатка, и я не читал ее после моего предупреждения. Я собираюсь ее отредактировать – wezzy

+1

Мысль, поэтому не беспокойтесь. Вы также можете «callback: _ (function() {...}). Bind (this)', если вы действительно хотели использовать '_.bind', или даже' callback: function() {...} .bind (это) ', если вы хотите использовать [' Function.prototype.bind'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind). –