2013-03-21 2 views
1

나는 아직 녹아웃에 익숙하지 않아 누군가가 나를 도와 줄 수 있기를 바라고있다.KnockoutJS - 관찰 가능한 개체가 정의되지 않았습니까?

이 내보기 모델 :

baseModel = { 
    logged_in : ko.observable(), 
    alerts : ko.observableArray(), 
    errors: ko.observable() 
}; 

그리고 내 HTML에서 내가 가진 :

<span data-bind="text: ($root.errors['myerror1'] === undefined)? 'undefined':$root.errors['myerror1']"></span>

내가 AJAX를 통해 임의의 객체에 끌어 희망 내에 할당하고있다. errors 속성. 예를 들어, 내 대답은 다음과 같습니다

if(response.errors !== undefined) 
    baseModel.errors = ko.mapping.fromJS(response.errors, {}, baseModel.errors); 

OR,

을 : 나는 내 AJAX 성공 콜백에서 다음 작업을 수행 할 때

Object {myerror1: "password is wrong", error2: "something else is wrong"}

나는 내 span에서 오류를 보여 기대

if(response.errors !== undefined) 
    baseModel.errors = response.errors; 

어느 쪽도 HTML에 바인딩 된 myerror1을 표시하지 않습니다. 나는 아마도 여기에서 많은 것들을 잘못하고있을 수 있습니다. 나는 틀린 것이 확실하지 않다. 감사! 새 값으로 errors 관찰을 업데이트하려는 경우

답변

1

, 당신은 =를 사용하여 설정할 수 있지만 매개 변수로 새로운 값을 전달하여 호출해서는 안 :

baseModel.errors({myerror1: "password is wrong", error2: "something else is wrong"}); 

업데이트 : I 코드에 두 개의 추가 문제가 발견 : undefined

  1. errors 시작; 더 나은 빈 개체로 설정, 그래서 바인딩이 먼저 평가됩니다 오류가되지 않습니다 : 당신이 data-bind의 표현식 내부 errors의 값을 원하는 경우에, 당신이 그것을 "전화"해야

    errors: ko.observable({}) 
    
  2. 그 값을 얻을 수 있습니다 - 대신 직접 사용하는 :

    <span data-bind="text: ($root.errors()['myerror1'] === undefined)? 
    'undefined':$root.errors()['myerror1']"></span> 
    

Example.

+0

시도해 보았습니다. 오류 텍스트가 있어야하는 곳은 여전히'undefined '가됩니다. 왜냐하면'$ root.errors [ 'myerror1'] === undefined'가'true'를 리턴하고 있기 때문입니다. – user1077213

+0

@ user1077213 분명히 표현식에서 값을 사용할 때 ('errors()'를 사용하여) 값을 명시 적으로 가져와야합니다. 나는 처음에는 그것을 알아 채지 못했습니다. 업데이트 된 답변을 참조하십시오. – mgibsonbr

+0

와우 이것은 정말 탁월합니다! 감사! – user1077213