2012-01-08 3 views
2

에 Backbone.js에 대한 localStorage 플러그인을 사용하는 표준 방법을 상점의 이름을 파라미터 화하는 것은 다음과 같이 작동 언어. 그래서 컬렉션 초기화시 Store의 이름을 인스턴스화 할 수 있기를 원합니다. AFAICT은이 작품을 좋아 :는 백본 localStorage.js

english = new Wordlist([], {language: 'English'}); 

또는 :

App.WordList = Backbone.Collection.extend({ 

    initialize : function(models, options){ 
     this.localStorage = new Store(options.language); 
    } 

    } 

가 그럼 난 같은 단어 목록을 인스턴스화 할 수있는 것입니다

chinese = new Wordlist([], {language: 'Chinese'}); 

, 난 정말이 이루어 보지 어떤 다른 예들과 나는 거기에있는 누군가가 "Eek!"하지 않기 때문에 궁금합니다.

편집

나는 이미 이런 식으로 일을 시도 것을 추가해야합니다 : 다음

App.WordList = Backbone.Collection.extend({ 

    initialize : function(models, options){ 
    }, 

    localStorage : new Store(options.store) 

} 

그리고 :

chinese = new Wordlist([], {language: 'Chinese'}); 

을하지만 어떤 이유로 options.store에 대한 정의되지 않은 올라오고있다.

+0

구문 적으로 말해서, 'localStorage : new Store (options.store)'예제에서'options'는 로컬이 아닙니다 당신이 만드는 콜렉션의 어떤 것에도. 그것은 어떤 외부 상황에서 정의되어야 할 것이다. 이 경우,'options' 자체는 정의되어 있지 않을 가능성이 있습니다. – JayC

+0

'initialize()'에 국한되지 않습니까? –

+0

내 말은 아래를 참조하십시오. – JayC

답변

1

답으로 자신을 설명하는 것이 더 쉽습니다.

에서 :

App.WordList = Backbone.Collection.extend({ 
    initialize : function(models, options){ 
     .... 
    }, 
    localStorage : new Store(options.store) 
}) 

이가이 방법의

var newInstanceConfig = { 
    initialize : function(models, options){ 
     .... 
    }, 
    localStorage : new Store(options.store) 
} 
App.WordList = Backbone.Collection.extend(newInstanceConfig); 

생각해에서 정말 조금 다르다; Backbone.Collection.extend(...)에 전달되는 객체에 대한 마법은 없습니다. 당신은 평범한 물건을 그냥 지나가고 있습니다. Backbone.Collection.extend이 파라미터

같이 객체와호출되면 매직 따라서, 객체 메소드 initialize의 옵션 파라미터 new Store(...)에 전달되는 것을 완전히 다른 일어난다. 할당 된 기능 initialize은 옵션 범위를 정의합니다. new Store(options.store)에 언급 된 사람이 어디에 정의되어 있는지 알 수 있습니다. window.options 일 수도 있고 다른 일부 범위에서 정의 된 옵션 일 수도 있습니다. 정의되지 않은 경우 오류가 발생할 가능성이 높습니다.

2 개 또는 3 개의 전략 옵션 만 볼 수 있습니다 (오, 이런, 용서해주세요!). 당신이 컬렉션의 새로운 인스턴스를 만들 때마다

, 다음 중 하나를 언어로

  1. 패스 및 필요한 어디 백본 컬렉션에 new Store(..)을 만들 수 있습니다.
  2. 미리 만들기 상점을 만들고 해당 저장소에 전달하거나 해당 인스턴스에 전달하려는 경우 (해당 생성자를 통해 직접 전달하거나 생성자에게 적절한 사전 생성 된 저장소를 "조회"할 수도 있음).
  3. 그리고 마지막으로 저장소를 만드는 작업을 다른 개체에 위임하고 하나 또는 두 개의 옵션을 구현하도록 할 수 있습니다. (기본적으로 매장 팩토리/리소스 관리자).

알아 두어야 할 사항은 이러한 전략 중 어떤 것이 효과가 있는지 알려줍니다. 나는 결코 localStorage를 사용하지 못했습니다. 불행히도, 나는 그 점에서 당신을 도울 수 없습니다. 내가 할 수있는 일은 App.Wordlist에서 실수로 여러 종류의 Store가 만들어 질 수 있다는 것인가?

사실 나는 다른 질문이 있습니다. 여기에 Store이 정의되어 있습니까? 사용중인 다른 API 라이브러리 중 어디에서 정의되어 있지 않습니까? 내가 알고있는 localStorage 문서를 숙고하면 Storage constructor의 내용이 있지만 Store은 없습니다. 그래서 당신도 알아낼 수 있습니다.

편집 # 1 : 신경 끄시 고, 난 당신이 인스턴스 후 로컬 스토리지를 구성 할 수있는 방법을 만들어이 문제를 가지고 I see you mentioned where Store was defined.

0

: 당신이 가진 후 다음 로컬 스토리지를 설정할 수 있습니다

var PageAssetCollection = Backbone.Collection.extend ({ 

initialize: <stuff> 

model: <something> 
... 

setLocalStorage: function (storageKey) { 
    this.localStorage = new Backbone.LocalStorage(storageKey),  
}, 
}); 

을 컬렉션을 설정하십시오 :