2014-09-27 2 views
1

В моем приложении я добавляю виды к content регионам и header,footer. Прежде чем добавить представление, я пытаюсь найти, существует ли контроллер. если это так, что я пытаюсь закрыть эти регионы, прежде чем я добавить еще так:Marionette `close()` или `empty()`

if(socialApp.Controller) { 
socialApp.Controller.layout.header.close(); 
socialApp.Controller.layout.content.close(); 
socialApp.Controller.layout.footer.close(); 
} 

Но я получаю сообщение об ошибке.

Вместо того, чтобы закрыть, я использовал метод empty(), который работает нормально.

if(socialApp.Controller) { 
    socialApp.Controller.layout.header.empty(); 
    socialApp.Controller.layout.content.empty(); 
    socialApp.Controller.layout.footer.empty(); 
    } 

что я делаю правильно? кто-нибудь подтвердит меня, пожалуйста? Примечание: мне нужно, чтобы close контроллер/виды, а ..!? Я использую Backbone.Marionettev2.1.0. Спасибо заранее.

ответ

4

От Marionette v2.1.0 Region docs

Если заменить текущий вид с новым видом, вызвав шоу, по умолчанию он будет автоматически уничтожит предыдущий вид.

От LayoutView

После первого рендеринга, все последующие оказывает вынудят каждый регион опорожнять путем вызова пустого метода на них. Это приведет к тому, что каждая точка зрения в регионе и под-представления, если таковые имеются, будут уничтожены.

Таким образом, я думаю, что вы не нужно, чтобы empty() их вручную

+1

Итак, как о проблемах в 'Memory leak' ручки? это 'марионетка' позаботится об этом, а ..? – 3gwebtrain

+2

Вообще-то я бы сказал «да». [Здесь] (https://github.com/marionettejs/backbone.marionette/issues/583) - хорошая статья о теме. – emem

-1
define(["app"], function (app) { 
    return { 
     clearRegions: function() { 
      app.topRegion.reset(); 
      app.bottomRegion.reset(); 
      app.wrapRegion.reset(); 
     } 
    } 
}); 

controller.js

index = function() { 
     helpers.clearRegions(); 
} 
Смежные вопросы