2012-05-24 1 views
0

I가 이미 모델을 사용 백본 정의도 이미 세트를 호출, 그리고backbonejs의 설정 방법은 작동하지 않을 수

window.ResourceModel = Backbone.Model.extend({ 

     default:{ 
      'relativeurl':'unknow', 
      'type': "unkonw" 
     }, 

     initialize: function(){ 

      this.bind("change:relativeurl", function() { 
       console.log('change!',this.relativeurl); 
      }); 

      this.bind("change:type", function() { 

      }); 
     }, 

     setRelativeURL: function (url) { 
      console.log('pass in',url);//this have value 
      this.set({"relativeurl": url});//this's value is undefined! 
     }, 

     delResource: function() { 
      console.log("this.url",this.relativeurl); 
      resourceMasterView.delResourceItem(this.url); 
     } 
    }); 

나는이 방법

window.resourceModel = new ResourceModel(); 
resourceModel.setRelativeURL(url); 
resourceModel.setType(type); 

를 호출 원하지만 그냥 내가 위에서 언급을 메서드에서 "relativeurl"결과는 여전히 정의되지 않았습니다!

내 코드에 어떤 문제가 있습니까?이 문제를 어떻게 해결할 수 있습니까?

답변

2

백본 모델의 relativeurl 속성에 액세스하려면 m.get('relativeurl'); 속성이 그래서 모델의 속성으로 저장되지 않습니다

console.log('change!', this.relativeurl); 

항상 this.relativeurl에 대한 undefined을 얻을 것입니다. 당신은 말을한다 :

console.log('change!', this.get('relativeurl')); 

데모 : 당신은 직접 this.attributes를 통해 속성에 액세스 할 수 있지만 일반적으로 혼자 attributes을 떠나야한다 http://jsfiddle.net/ambiguous/VBQ5h/

:

console.log('change!', this.attributes.relativeurl); 

데모 : http://jsfiddle.net/ambiguous/y3Q6b/

귀하 진짜 문제는 아마 사이에 혼란 일 것입니다. 오페라백본 속성. 속성은 객체의 필드이며 o.some_property 또는 o['some_property']으로 액세스됩니다. 백본 모델은 주로 모델의 attributes 속성에 저장되며 get을 통해 액세스되고 set (물론 fetch, unsetclear)으로 수정되는 특성을 처리합니다. 백본 모델은 임의의 개체 속성에 대해 아무것도 모릅니다.

+0

백본의 get/set은 모델 객체에 "속성"을 가져 오거나 설정하지 않는다는 점을 언급해야합니다. 모델 객체에 "속성"을 가져 오거나 저장합니다. 나는 바보 같고 거의 까다 롭다.하지만 속성은 항상 "object.someProperty"인 것처럼 보이고, 백본의 문서는 그것들을 "속성"에 대한 getter/setter로 참조한다. – Stephen

+0

@Stephen : 용어에 대해 까다로울 필요는 없습니다. 업데이트 된 버전이 더 좋습니까? (내가 snarky 아니에요, 나는 정말로 선명도에 대해 신경 쓰지 :) –

+0

가장 심각한 +1 – Stephen

관련 문제