얘들 아를 통해 (모델 instanceof를 모델), 변수의 세트로 인해 명확하게하기 어렵다 그것에 도착해야합니다. 함께 작업하고있는 프레임 워크를 빨리 설명해 드리겠습니다.Backbone.js 크롬 확장
나는 모든 것을 관리하기 위해 jQuery를, jQuery를-UI 및 백본
확장에 대한 전체 JS 스위트 커피 스크립트로 작성하고 내가 레일을 사용하고있어 자산 파이프 라인을 사용하여 크롬 확장을 짓고 있어요. 즉, 내 확장 코드를 배포 할 때 rake assets:precompile
을 실행하고 결과 압축 JS를 내 확장 디렉토리에 복사한다는 것을 의미합니다.
이 접근법에 대한 좋은 점은 실제로 라이브러리를 포함하여 내 Rails 앱 내부에서 확장 js를 실행할 수 있다는 것입니다. 이것은 js를 내용 스크립트로 주입하는 내 확장 기능 background.js 파일과 기본적으로 동일합니다.
어쨌든 최근에 발생한 문제는 내 친구 사이트에서 내 확장 프로그램을 테스트 해본 결과입니다 (whiskeynotes.com).
주목해야 할 점은 백본 모델이 각 컬렉션에 추가 될 때 엉망이되고 있다는 것입니다. 그래서 뭔가
this.collection.add(new SomeModel)
이 코드는 결국 내가 확장을 테스트했습니다하는 대부분의 사이트에서, 결과는하지만 내 친구의 사이트에 !(model instance Model)
은 참으로 평가, 정상,
_prepareModel: function(model, options) {
options || (options = {});
if (!(model instanceof Model)) {
var attrs = model;
options.collection = this;
model = new this.model(attrs, options);
if (!model._validate(model.attributes, options)) model = false;
} else if (!model.collection) {
model.collection = this;
}
return model;
},
이제 백본의 prepareModel 코드로 실행 실제로 올바른 클래스의 인스턴스 임에도 불구하고. 결과는 모델의 속성이 모델 컬렉션 (이상한 권리?)에 대한 참조 인 모델의 엉망진창입니다. 말할 필요도없이 모든 종류의 미친 일들이 일어났습니다.
왜 이런 일이 발생하는지는 나를 넘어선 것입니다. 그러나이 라인을 (!(model instanceof Model))
으로 변경하면 (!(model instanceof Backbone.Model))
가 문제를 해결하는 것으로 보입니다. 아마도 Flot 라이브러리 (jQuery 그래프 라이브러리)와 'Model'을 자체 버전으로 만들었지 만 소스를 살펴보면 인스턴스가 생성되지 않는다고 생각했습니다. 나는 이것이 왜 일어날 지 궁금하다. 그리고이 작은 변화를 백본 소스에 추가하는 것이 합리적입니까?
는 업데이트 :
는 그냥 "수정"실제로 작동하지 않는 것을 깨달았다. 또한 백본을 추가 할 수 있습니다. 모델은 래핑 객체에 네임 스페이스를 두어 선언문이 다음과 같이 보이도록합니다. class SomeNamespace.SomeModel extends Backbone.Model