2012-01-25 2 views
1

나는 간단한 사용자 모델을 가지고속성 변경 값은

_callbacks 
    Object { change:auth=[1]} 

_changed 
    false 

_changing 
    false 

_escapedAttributes 
    Object {} 

_previousAttributes 
    Object { auth=true, username="admin", sessid="roo74p7m7t0a3erke8r3vsat33"} 

_unsetAttributes 
    null 

attributes 
    Object { auth=true, username="admin", sessid="roo74p7m7t0a3erke8r3vsat33"} //<-- under this.attributes.username is string 

cid 
    "c0" 

defaults 
    Object { sessid="roo74p7m7t0a3erke8r3vsat33", auth=null, username=null} 

idAttribute 
    "id" 

constructor 
    function() 

_performValidation 
    function() 

bind 
    function() 

change 
    function() 

changedAttributes 
    function() 

clear 
    function() 

clone 
    function() 

destroy 
    function() 

escape 
    function() 

fetch 
    function() 

get 
    function() 

has 
    function() 

hasChanged 
    function() 

initialize 
    function() 

isNew 
    function() 

logout 
    function() 

parse 
    function() 

previous 
    function() 

previousAttributes 
    function() 

save 
    function() 

set 
    function() 

toJSON 
    function() 

trigger 
    function() 

unbind 
    function() 

unset 
    function() 

url 
    function() 

__proto__ 
    Object { defaults={...}, _changed=false, idAttribute="id"} 

Everythings 괜찮을 것 같다,하지만 두 번째 CONSOLE.LOG (this.attributes)입니다 : 로그는

Object { auth=true, sessid="roo74p7m7t0a3erke8r3vsat33", username=null} // oh no now it's null 

결론적으로 this.attributes.username의 값이 변경되었습니다. 내가 어떻게 해결할 수 있는지 생각해?

+2

명시 적으로 문제를 나타내십시오 –

+0

"사라지는"속성은 무엇입니까? 첫 번째와 두 번째 로그 모두에있는 attributes 객체에서 세 개가 표시됩니다. –

+0

두 번째 콘솔 로그의 this.attributes 등록 정보에서 사용자 이름을 확인하십시오. null입니다. 나는 그동안 콘솔에서 아무것도하지 않았다 .log. 그래서 username의 가치는 왜 다른가? – sebastian

답변

3

이것은 방화범과 관련된 약간의 변종입니다. 난 당신이 이런 식으로 한 번에 몇 가지 속성을 설정하는 가정 : 무슨 일이에요

var myuser = new user(); 
myuser.set({sessid:"roo74p7m7t0a3erke8r3vsat33", auth:true, username:"admin"}); 

이 인의 change:auth 이벤트는 사용자 이름이 모델에 설정되어 전에 라고되고있다. 이 때문에 두 번째 console.log이 정확하며 아직 사용자 이름이 설정되어 있지 않으므로 표시되지 않습니다. 당신이 user 객체에 대한 참조, 하지 사본를 기록하고 있기 때문에

첫 번째 console.log 제대로 모든 것을보고있는 이유입니다. 콘솔에서 객체를 클릭 할 때까지 모든 속성이 설정되어 모든 속성을 볼 수 있습니다.

코드가 올바르게 작동하므로 모든 속성이 설정됩니다. 당신이 당신의 set 객체 auth:true 이전에 username:"admin"를 이동하는 경우 다음과 같이 케이스를 증명하기

var myuser = new user(); 
myuser.set({sessid:"roo74p7m7t0a3erke8r3vsat33", auth:true, username:"admin"}); 
console.log(myuser.attributes); 

또 다른 방법 : 당신은 당신이 속성을 설정 한 직후 지금처럼 console.log을 추가하여이를 확인 할 수 있어야한다 :

var myuser = new user(); 
myuser.set({sessid:"roo74p7m7t0a3erke8r3vsat33", username:"admin", auth:true}); 

당신은 change:auth를 호출하기 전에 사용자 이름 속성을 설정 한 것이기 때문에 사용자 이름이 두 번째 console.log에 표시가 나타납니다.