2012-11-14 4 views
1

개체 모음이 있지만 이러한 개체에 대한 상위 수준의 정보를 저장하려는 경우 컬렉션에 일부 모델 동작을 추가하는 것이 적절합니까?백본에서 모델 동작을 컬렉션에 추가 할 수 있습니까?

내 경우에는 'curPath'라는 bool 필드가있는 응용 프로그램 경로 모음을 찾고 있습니다. 변경된 경우 컬렉션은 현재 페이지를 나타내는 플래그를 설정해야합니다. 외부 관측자는 경로 수집의 모든 모델이 아닌 하나의 필드 만 관찰하면됩니다. (

var PathModel = Backbone.Model.extend({}) 
var PathCollection = Backbone.Collection.extend({ 
    initialize: function(){ this.model = PathModel } 
}) 
// I want to be able to set observable properties on the collection, so... 
var PathManager = _.extend(Backbone.Model, PathCollection) 

// Then maybe I can do something like this? 
PathManager.each(function(pathModel){ 
    pathModel.on('change:curPath', function(m, value, o){ 
    // I mean for 'this'.set to point to the instance of the PathManager 
    if (value === true){ this.set('curPath', pathModel.get('id')) } 
    }, this) 
}, this) 

이 콜렉션 (수집 + 모델> 모델)으로 관찰 동작을 추가하는 것이 적절하다, 또는 내가 모든 일에 배치 모델을 추가해야하나요 : 여기

그것이 어떻게 보이는지이다 모델> 컬렉션> 모델), 아니면 다른 해결책이 있습니까?

답변

0

Model 및 Collection의 메소드 중 일부는 충돌을 일으킬 수있는 동일한 이름을 가지며 이후 버전의 Backbone으로 업데이트 할 때 발생할 수있는 문제가 발생할 수 있으므로이 패턴에 대해 조언 할 것입니다. 그 다음에는 PathManager 클래스를 만들고이 모델에서 PathCollection을 초기화하고 경로 속성으로 설정해야합니다. 이

+0

PathManager 같은 당신이

var PathManager = Backbone.Model.extend({ initialize: function() { this.paths = new PathCollection(); } }); var pathManager = new PathManager(); pathManager.paths.add({ /* new path */ }); pathManager.on('change', doSomething); pathManager.paths.on('add', doSomethingElse); 

을 말하는 것을에서 내가 할 줄 경우 뭔가 모델이다. "경로"는 개체 자체의 속성이 아니라 get/set 메서드를 통해 액세스/설정하는 특성이어야합니까? 아니면 그들은 이미 (백본이 단서가 있습니까?) 내가 이해할 수있는 어떤 장점이 있다는 것을 말하는 것은 아닙니다 (예를 들어, 변경 이벤트가 get/set 속성이었을 것이라고 생각하지 않습니다). 나는 다만 정상적인 연습 인 무슨 일하는 것을 시도하고있다? – zod

+0

모델 속성으로 넣지 말고 예제처럼 속성으로 유지하는 것이 좋습니다. 콜렉션/모델을 특성으로 중첩 시키려면 적절한 동기화 등을 위해 백본의 관계형 플러그인에 대해 더 자세히 읽는 것이 좋습니다. –

관련 문제