2014-02-17 2 views
0

주로 Cristophe Coenraets의 PhoneGap examples on GitHub을 기반으로 backbone.js + cordova + require.js 프레임 워크를 사용하여 놀았습니다. 내 모델을보기에 표시하는 것은 간단하지만 여전히 설정 또는 저장 호출을 통해 모델을 업데이트 할 수 없습니다. 내가 얻을 수있는 호출하여 내 컬렉션에서 개체를 뽑을 수Backbone.js에서 모델 객체를 설정하려고 시도하는 TypeError

SourcePhrase = Backbone.Model.extend({ 
    // default values 
    defaults: { 
      id: null, 
      markers: "", 
      orig: null, 
      source: "", 
      target: "" 
    }, 

    sync: function (method, model, options) { 
     if (method === "read") { 
      findById(this.id).done(function (data) { 
       options.success(data); 
      }); 
     } 
    } 
}), 
// etc 

:

// find and update the model object 
var strID = $(event.currentTarget.parentElement).attr('id'); 
var model = this.collection.get(strID); 

를 지금까지 너무 좋은 :

model.set('target', trimmedValue); 

내 모델은 다음과 같이 보입니다

TypeError : '정의되지 않음'이 ('i = t [r]을 (를) 평가하는) 함수가 아님 callback.call (i.ctx, n, a) ')

음 ... 맞지 않습니다. 내가 이것을 추적하기 위해 어디에서 시작해야 할까?

편집 : 그냥 전화 전 모델의 콘솔 출력 설정 :

model: Object 
_changing: false 
_events: Object 
_pending: false 
_previousAttributes: Object 
attributes: Object 
id: "RUT001-10" 
markers: "\hdr" 
orig: null 
source: "Ruth" 
target: "Ruth" 
__proto__: Object 
changed: Object 
cid: "c15" 
collection: Object 
id: "RUT001-10" 
__proto__: Object 
strID: "RUT001-10" 
+0

'set' 앞에'console.log (model)'을 넣으십시오. 출력은 무엇입니까? – msvalkon

+0

@msvalkon : 추가됨. by-reference copy를하고있는 것처럼 보입니다. (예상 된 것 같습니다.) - 콜렉션이 콜렉션 오브젝트로 설정되었습니다. – eb1

+0

네 말이 맞아, 나는 내 대답을 삭제했다. –

답변

1

예는 사용할 수있는 권리 방법, 그리고 당신도이 같은 코드를 변경할 수 있습니다

this.model.bind('change', this.render, this); 

그것은 작동합니다.

+0

안녕하세요, Rida, 미안 해요 - bind 메소드는 여전히 "this"를 세 번째 인자로 추가 할 때조차도 TypeError를 던지고 있습니다. :/ – eb1

+0

죄송합니다.'this.render()'를'this.render'로 바 꾸었습니다. –

+0

이것을 시험해 볼 기회가 있었고 코드도 잘 작동했습니다. 감사! – eb1

0

확인을, 내가 생각하는 나는 어쩌면, 그것을 아래로 추적 겠는가? 나는 "이"문제로 실행되었을 수 있습니다 의미

initialize: function() { 
    this.model.bind('change', this.render()); 
    this.render(); 
}, 

가 바인드() 호출이 형식 오류를 일으키는 : 나는 하나의 항목에 대한 내보기로했다? (. backbone.js and binding "this") 여하튼, 나는이 하나를 사용하여 블록을 교체했습니다

initialize: function() { 
    this.listenTo(this.model, 'change', this.render); 
}, 

트릭을 할 것으로 보인다. 더 많은 backbone.js 전문 지식을 가진 사람이이 접근법에 대해 의견을 제시 할 수 있다면 정말 고맙겠습니다. 이 일을 제대로하고 있습니까?

관련 문제