Knockout.js - как мне получить значение наблюдаемого свойства внутри вычисленного наблюдаемого?

У меня есть следующий объект Knockout.js:

var viewModel = {
    description : ko.observable(""),
    Name : ko.observable(""),
    productid : ko.observable(""),
    productmodel : ko.observable(""),
    productnumber : ko.observable(""),
    text_relevance : ko.observable(""),
    mydunamicfield : ko.computed(function() {
        return "bq=(and " +
            ((this.description == "") ? "" : ("description:" + this.description + " ")) +
            ")";
    } , this)
};

Но свойство mydunamicfield не создает правильный конкатенированный результат. Если я попытаюсь ссылаться на this.description() внутри другой функции, я вижу следующее сообщение об ошибке при загрузке страницы:

Property 'description' of object [object Window] is not a function

В чем проблема в этом случае?

Ответ 1

Во-первых, вы должны указать this.description как this.description(), если хотите получить его значение.

Во-вторых, попробуйте помещать ваше поле computed вне вашего viewModel (поскольку 'this', который является viewModel сам, не определен в точке, в которой вы создаете наблюдаемый computed.

См. http://jsfiddle.net/rAEqK/2/ для рабочего примера.