2013-03-21 5 views
1

Я до сих пор новичок в Knockout, поэтому я надеюсь, что кто-то сможет мне помочь.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 и назначая его к моему. ошибки. Например, когда мой ответ таков:

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

Я ожидаю, что это, чтобы показать ошибку в моем span, когда я следующий в моем успехе обратного вызова AJAX:

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

ИЛИ,

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

Не показывает myerror1, что я связал в HTML. Возможно, я мог бы сделать что-то не так. Я не уверен, что случилось. Благодаря!

ответ

1

Если вы пытаетесь обновить errors наблюдаемого с новым значением, вы не должны установить его с помощью =, но назвать его пропусканием нового значения в качестве параметра:

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

Update: I пятнистый две дополнительные проблемы с вашим кодом:

  1. errors начало как undefined; лучше установить его на пустой объект, так что не будет ошибкой, когда переплеты первые оценивали:

    errors: ko.observable({}) 
    
  2. Если вы хотите получить значение из errors внутри выражения в data-bind, вы должны «назвать» его чтобы получить его значение - вместо того, чтобы использовать его непосредственно:

    <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

Смежные вопросы