2012-01-18 7 views
5

Backbone.js에서 모델 유효성 검사의 이상한 동작이 발생했습니다. 모델이 먼저 생성 백본 모델 유효성 검사

하나가 source에서 볼 수 있듯이 백본, 파라미터로 지정된 맵 {bar: 42} 전달 foo.set()를 호출
var foo = new Foo({ 
    bar: 42 
}); 

있다. silent === true를 가진 것은 이런 맥락에서 이해가되지 않는 change 이벤트를 트리거 피할 수 있기 때문에이 과정에서, 또한, 라인

this.set(attributes, {silent : true}); 

이 말이 같이 옵션 {silent: true}을 전달합니다.

내가 이해할 수없는 몇 가지 이유가 있지만 silent === true은 유효성 검사를하지 않습니다.; 라인

if (!options.silent && this.validate && !this._performValidation(attrs, options)) return false; 

에서 소스를 볼 그래서 모델을 표시입니다 만들어 질 때 검증되지 않지만 일부 속성이 변경 될 때 그들은 보통 결코. 더욱이 유효성 검사의 존재는 완전히 직교하는 이벤트 인 change 이벤트를 전송하는 동작과 불가분의 관계에 있습니다.

누구에게 설명 할 수 있습니까? 이 문제를 해결할 수있는 깨끗하고 미래를 보장하는 방법은 무엇입니까?

나는 수동으로 _performValidation를 호출 할 수 있지만,이 두 가지 단점이 있습니다

  • 먼저, 그것은 단순히
  • 초을 잊을 수있는 일이며, _performValidation는 API의 일부가 아니며 어쩌면이 변경됩니다 향후 릴리스에서.

답변

3

실제로 나는 이것이 Backbone.JS의 버그라고 생각합니다.

여기 GitHub의에 열려 문제가 있습니다 : https://github.com/documentcloud/backbone/issues/870

편집 : 새로운 버전의 모델이 isValid 방법 (http://backbonejs.org/#Model-isValid)

으로 유효한 경우 Backbone.js의 0.9.1, 당신은 테스트 할 수 있습니다
+0

그래, 고맙다, 내가 뭔가를 놓치고 있다고 생각했다. – Andrea

+1

버전 0.9.9 업데이트 : "자동"변경 중에도 유효성 검사가 수행됩니다.이 변경은 isValid 메서드가 제거되었음을 의미합니다. 옵션에 오류 콜백이 지정되어 있어도 유효성이 검증되지 않으면 오류가 트리거됩니다. – romanlv

0

현재 안전을 유지하는 유일한 방법은 매개 변수 해시를 전달하지 않는 것입니다.

내가 항상 :

var m = MyMOdel(hashFromDB); 

:

일부 JSON 데이터는 DB에서 오는 경우
var m = new MyModel(); 
// and then I do all the sets 
m.set(...); 
m.set(...); 
m.set(...); 

, 다음 그들은이 미세의 경우 이미 그렇게 검증 된 것으로 가정된다 말이 돼?

관련 문제