2013-10-31 5 views
2

을 가지고 내가 가지고 다음 뷰 클래스 :백본 - 인스턴스화보기는 이전 데이터

define(function(require) { 
    var Backbone = require('backbone'); 

    var TestView = Backbone.View.extend({ 
     el: $("#test"), 
     test: new Array(), 

     initialize: function(){ 
      this.test.push("test"); 
      console.log(this.test); 
     } 
    }); 

    return TestView 
}); 

그래서 같은보기를 인스턴스화하는 경우 : 시험 배열이 하나마다 등으로 증가되는

var v = new TestView(); 

각 인스턴스마다 비어있는 것에 반대했다. 좀비보기를 제거하기위한 조치를 취했지만 (이 URL의 단계 : http://lostechies.com/derickbailey/2011/09/15/zombies-run-managing-page-transitions-in-backbone-apps/) 어레이는 여전히 각각의 새로운 인스턴스 생성시 이전 데이터를 유지합니다.

분명히 초기화 함수 내부의 데이터를 제거 할 수 있지만 본질적으로 완전히 새로운 뷰 객체 인이 데이터가 유지되는 이유는 궁금합니다. 일부 가비지 수집 문제가있는 것 같습니까?

+0

새로운 Array() 대신'test : []'를 설정하면 어떻게 될까요? – tmaximini

+0

불행히도 같은 거래 : ( – Hanpan

+0

당신이 테스트를 수행하는 곳의 관련 코드를 모두 표시 할 수 있습니까? – tmaximini

답변

3
귀하의 new Array() 호출 만이 그리고 TestView 프로토 타입을 만들 때, 당신이 그렇지 않으면 그리고 TestView의 모든 인스턴스간에 공유되는 객체가 실제로 이루어질 때를 작성해야한다

,

initialize: function(){ 
    this.test = new Array(); 
    this.test.push("test"); 
    console.log(this.test); 
} 

같은 일 내가 할 경우, 그래서

var v = new TestView(); 
$("#test").detach(); 
var v2 = new TestView(); 
v.el == v2.el // true 

당신이 원하는 것을 달성하기 위해,뿐만 아니라 당신의 el: $("#test") 호출로 일어날

,162,
+0

이 경우 성가 시지만 다른 사람에게 편리 할 수 ​​있습니다! 감사합니다. – Hanpan