2016-09-09 2 views
1

url 속성을 메서드로 설정하여 Backbone Collection 클래스를 사용하고 있습니다.백본 컬렉션 URL 매개 변수를 사용하지 않습니다.

url은 내가 baseUrl, usernamepath를 불렀다 3 "요소"로 구성되어 있습니다 - 그래서 내가 작업하고있는 스파에서 여러 사용자에 대해 동일한 인스턴스를 사용 baseUrl/username/path

과 같을 것입니다. 그러나 (인스턴스 생성 후) 변경할 수있는 한 요소는 사용자 이름입니다. 나는 2 가지 이유가 필요하다.

1st - 인스턴스화 할 때 username 속성이 없습니다.

둘째 - 사용자에 따라 사용자 이름이 달라지며 모든 새 사용자에 대해 컬렉션의 새 인스턴스를 만들고 싶지 않습니다.

내 문제는 myCollection.url({username: "Mac"})과 같은 작업을 수행 할 수 있도록 url 메서드가 컬렉션을 인스턴스화 한 후에 매개 변수를 사용하지 않는 이유는 무엇입니까?

또한 Backboneurl 방법으로 매개 변수를 전달할 수 없습니까?

답변

1

백본은 url 메서드를 컨텍스트로 호출하여 this으로 컬렉션 인스턴스의 멤버 변수에 액세스 할 수 있습니다.

var MyCollection = Backbone.Collection.extend({ 
    url: function() { 
     return "base-url/" + this.username + "/path"; 
    }, 
}); 

수동 컬렉션의 username 필드를 설정할 수 있습니다, instanciation 후이를 사용하거나 컬렉션의 sync 메소드를 오버라이드 (override) 할 수있다.

var MyCollection = Backbone.Collection.extend({ 
    url: function() { 
     return "base-url/" + this.username + "/path"; 
    }, 

    sync: function(method, model, options) { 
     options = options || {}; 
     if (options.username) this.username = options.username; 

     // call the default sync 
     return Backbone.collection.prototype.sync.call(this, method, model, options); 
    } 
}); 

그리고 그것을 사용 :

myCollection.fetch({ username: "Mac" }); 

내가 백본의 annotated source의 열렬한 사용자입니다 그것은 같은 정말 중요한

URL을 호출하는 방법을 알고하는 방법에 대한 자세한 내용은 많은 백본의 기능이 문서화되지 않았으며 출처는 작고 간편합니다. 당신이 sync 방법을 선택하면

, 당신은 그 라인 표시되어야합니다

params.url = _.result(model, 'url') || urlError(); 

을 그리고 당신은 밑줄의 result 기능을 선택하면, 당신은이 같은 (문자열로 전달) 함수를 호출 것을 볼 수있다 :

return _.isFunction(value) ? value.call(object) : value; 
관련 문제