1

EDIT tl;모델 만 가져 와서 일부 유효성 검사 조건을 충족하는 컬렉션에 추가하고 싶습니다. 단일 모델 만 가져 오는 경우 model.validate() 메서드를 사용할 수 있지만 collection.fetch()을 사용하면 model.validate()이 호출되지 않습니다.내 백본 모델의 유효성 검사 메서드가 model.fetch에서 호출되었지만 collection.fetch에서 호출되지 않았습니다.

나는 githubist API를 사용하여 요주의 인물 (a la bl.ocks.org)을 만들고 있습니다. 나는 단지 "태그"파일이 기 스트를 표시하고 싶은, 그래서 난 내 요점 모델에 validate 메소드를 가지고 : 나는 GitHub의에서 하나의 요점을 가져올 때 제대로 작동

class Gist extends Backbone.Model 

    validate: (attrs, options)-> 
    if attrs.files.hasOwnProperty("tags") is false 
     return "no tags file" 

    sync: (method, model, options) -> 
    options.timeout = 8000 
    options.dataType = 'jsonp' 
    options.validate = true 
    return Backbone.sync(method, model, options) 

    defaults: ...... 
    parse: (data)-> ...... 

. 그러나 요점 모음을 가져올 때이 유효성 검사 메소드가 실행되지 않습니다.

class Gists extends Backbone.Collection 

    model: Gist 

    sync: (method, model,options) -> 
    options || options = {} 
    options.timeout = 8000 
    options.dataType = 'jsonp' 
    options.validate = true 
    return Backbone.sync(method, model, options) 

    parse: (response) -> 
    response.data 

    #more methods here, including initialize, comparator, and custom ones 

지금이 행동은 내가 기 스트의 목록을 표시하고 때, 내가 "태그"파일 (아래 스크린 샷 참조)이없는 기 스트 샷을 얻을 수 있다는 것입니다. 그러나 잘못된 요지가있는 미리보기 이미지를 클릭하면 validate 메서드에서 반환 된 validationError이 표시되기 때문에 표시되지 않습니다. (gist 모델의 fetch 메서드는 github에서 추가 정보를 얻기 위해 미리보기 이미지를 클릭 할 때 호출됩니다. 렌더링)

enter image description here

나는 그것이 태그 파일이없는 경우 모델이 collection.fetch를 통해 컬렉션에 추가되지 않았는지 확인하기 위해 모델의 validate 방법을 사용할 수 있습니까?

+0

컬렉션에서 파서 (구문 분석 함수)를 사용하여 원치 않는 모델을 필터링합니다. –

+0

고맙습니다. 백 보네 - 페치 캐쉬 (backbone-fetch-cache)로 좀 더 교활한 뭔가가 진행되고 있다는 것을 깨달았습니다. 첫 번째 페이지로드시 모델의 유효성을 올바르게 검사했으며 이후의 새로 고침시 잘못된 모델 만 표시되었습니다. 그러나 collection.parse를 사용하면이 문제가 해결됩니다. – elsherbini

답변

0

라비 하사의 제안은 아름답게 작동했습니다. 여기에 내가 그것을 구현하는 방법입니다

class Gists extends Backbone.Collection 

    model: GistModel 

    sync: (method, model,options) -> 
    options || options = {} 
    options.timeout = 8000 
    options.dataType = 'jsonp' 
    return Backbone.sync(method, model, options) 

    parse: (response) -> 
    (gist for gist in response.data when gist.files.hasOwnProperty("tags") is true) 
0

백본 구문 분석이라는 기능을 가지고, 백본 모델링하는 서버에서 콘텐츠를 결합하기 전에 모든 데이터가 서버에서 반환 될 때 호출된다. 이 기능을 무시할 수 있습니다.

Model = Backbone.Model.extend({ 
    parse: function() { 
     return { 
      id: this.get("id"), 
      AnotherThing: this.get("AnotherThing") 
     } 
    } 
}); 

여기를 읽어보십시오.

http://backbonejs.org/#Model-parse

는 도움이되기를 바랍니다.