2012-02-25 2 views
2

backbone.js 컬렉션에 몇 가지 특별한 속성이 있습니다. 범위를 벗어나면 콜렉션 상태가 유지되는 것 같습니다.

TestCollection = Backbone.Collection.extend({ 
    properties: { 
     something: 'foo', 
     other: 'bar' 
    } 
}); 

test가 URL #test 쳤을 때 호출되는 경로라고 말할 : 나는 시도하고 설명하기 위해 간단한 예를 함께했다. 이 메소드가 실행됩니다.
test: function(){ 
    var c = new TestCollection(); 
    console.log(c.properties.something); 
    c.properties.something = 'changed'; 
}, 

그때 다른 해시를 방문하는 경우

#anythingelse 말을하고 #test로 돌아가, 콘솔은 여전히 ​​오히려 "foo"의 값보다 "changed"를 기록합니다. 컬렉션을 만들 때 상태를 "재설정"해야합니다. 지역 변수가있을 때 국가가 주변에 머무르는 이유는 무엇입니까? 내가 시도하고 일부 속성을 "백업"및 초기화 기능에서 검색 할 수 있습니다 _.clone 같은 몇 가지 시도했다 그러나 나는 아직 성공하지 못했습니다. 나는 단지 내가 완전히 오해하고 있고 간단한 해결책이 있기를 바라고있다.

답변

2

딥 복사가 진행되지 않으므로 모든 TestCollection 인스턴스가 정확하게 동일한 properties 값을 공유하게됩니다. 사실, ggozad은 아래의 메모와 같이 복사가 전혀 일어나지 않으므로 properties이 인스턴스가 아닌 프로토 타입에 첨부되어 있습니다.

TestCollection = Backbone.Collection.extend({ 
    properties: { 
     something: 'foo' 
    }, 
    m: function(x) { 
     this.properties.something = x; 
    } 
}); 
var t1 = new TestCollection(); 
var t2 = new TestCollection(); 

t1.m('pancakes'); 
console.log(t1.properties.something); 
console.log(t2.properties.something); 

var t3 = new TestCollection(); 
console.log(t3.properties.something); 

데모 : http://jsfiddle.net/ambiguous/hBeHU/

이 딜레마의 밖으로 쉬운 방법은 이동하는 세 가지 경우가 properties에서 정확히 같은 {something: '...'} 객체를 공유하기 때문에 예를 들어, 당신에게 당신의 콘솔에서 세 pancakes을 줄 것이다 당신의 properties 컬렉션의이 initialize에 : 당신이 TestCollection의이 버전을 사용하는 경우

TestCollection = Backbone.Collection.extend({ 
    initialize: function() { 
     this.properties = { 
      something: 'foo' 
     }; 
    }, 
    m: function(x) { 
     this.properties.something = x; 
    } 
}); 

다음 한 01를 얻을 수 있습니다 콘솔에과 2 개의 foo이 있습니다.

데모 :

+1

http://jsfiddle.net/ambiguous/GywKF/ 그냥 모든 여부'인스턴스가 공통'properties' 속성이 깊은 복사 관련이없는이 TestCollection' 지적. 첫 번째 예제에서는'extend'에'properties'를 정의하여'TestCollection.prototype'에 추가하면 TestCollection의 모든 인스턴스에서 단일 참조를 사용할 수 있습니다. 두 번째 예제에서는 TestCollection 인스턴스마다 하나의 참조를 사용할 수 있습니다. – ggozad

+0

@ggozad : 맞아요, OP는'properties'가 복사되지 않을 때 각 인스턴스에 완전히 복사 될 것으로 기대하고 있습니다. 나는 그것을 명확히하려고 노력했다. –

관련 문제