2013-06-11 2 views
1

공식적으로 지원되는 Firebase 용 backbone.js 바인딩을 사용하여 Firebase에서 모델의 데이터를 검색 할 수 없습니다.Backfire 바인딩을 사용하여 모델에서 패치를 수행하면 데이터가 검색되지 않습니다.

예를 들어, 나는 중포 기지의 기준에 따라 저장된 사용자 # 2에 대한 모든 정보를 가져 오기하려면 : 내 사용자에게 고유 한 ID로 새로운 사용자 모델을 만들 것

https://app.firebaseio.com/users/2 

이 작업을 수행하는 방법 및 그 모델에 가져 호출이에서

var ProfileModel = Backbone.Model.extend({ 

    initialize: function() { 
     console.log('Profie Model'); 
    }, 

    firebase: new Backbone.Firebase("https://app.firebaseio.com/users"), 

}); 

var userProfile = new ProfileModel({id: "2"}); 
userProfile.fetch({ 
    success: function (model, response, options) { 
    console.log(model); 
    console.log(response); 
    console.log(options); 
    userProfile.set({test: "test value"}); 
    userProfile.save(); 
    }, 
    error: function() { 
    alert('Something went wrong!'); 
    } 
}); 

은 성공 콜백 해고되지만 데이터가 중포 기지에서 모델에 추가되지 않고 응답이 정의로 반환됩니다 니펫을. 그러나 테스트 값이 모델에 설정되고 save()가 호출되면 데이터가 Firebase에 올바르게 저장됩니다.

바인딩은 id 속성을 사용하여 사용자 # 2에 대한 경로를 만들 때 urlRoot를 모델에 설정할 필요가 없다고 가정합니다.

readme에서 설명한 것처럼 firebase 객체가 모델이나 컬렉션에 추가되면 Firebase를 대신 사용하여 백본 동기화를 재정의합니다. 바인딩 자체를 파고 가기 전에 어떤 제안이라도 대단히 감사하겠습니다.

+0

나는 firebase에 대한 경험이 없지만 사용자의 ID 속성은 실제로 문자열입니까, 아니면 숫자입니까? var userProfile = new ProfileModel ({id : "2"}); – damienc88

+0

답장을 보내 주셔서 감사합니다. 놀랍게도 ID가 문자열 인 경우 ID가 백본에서 정수로 변환 될 수 있습니다. –

답변

2

검색하려는 데이터가 Backfire에서 기록되지 않은 경우 데이터가 올바르게 읽히지 않습니다.

대부분의 경우
/users 
    /2 
    /id: 2 
    /attribute1: "foo" 
    /attribute2: "bar" 

, https://app.firebaseio.com/users/2/id이 당신의 중포 기지에 정의되지 않으며, 유효한 모델이 인식하지 못하는 역화 : 기존 데이터를 읽으려고하는 경우의 형식 있는지 확인합니다.

데이터를 저장 두 번째는, 콜백이 올바른 데이터를 얻는 이유는 - 당신은 대장간의 데이터를 보면, 당신은 볼 수 있습니다 :이 도움이

/users/2 
    /id: 2 
    /test: "test value" 

희망을!

+0

고마움 Anant, 나는 Backbone.Firebase.Model을 사용하는 대신이 작업을 할 수 없었습니다. backbone-firebase.js에서 훑어 본 후 read 메소드가 실제로 firebase를 호출하여 모델을 검색하지 않는 것처럼 보입니다. 내가 잃어버린 뭔가를 말해 주면 나를 정정하십시오. –

+0

맞습니다.'read()'는 동기식 호출이므로 우리가 가지고있는 데이터를 반환 할 것입니다. 불행히도 이것은 초기 데이터가 수신 될 때까지 함수가 빈 레코드를 반환한다는 것을 의미합니다 (그러나 레코드를 나중에 가져올 수 있어야합니다). 따라서 암시 적 동기화 방법 (Backbone.Firebase.Model 및 Backbone.Firebase.Collection)을 사용하는 것이 좋습니다. – Anant

+0

신난다. 해명 해줘서 고마워. –