KnockoutJs, не может получить правильное значение

Я загружаю свой код в jsFiddle, вы можете протестировать его там.

http://jsfiddle.net/2RPsw/1/

вот в чем проблема, вместо получения полного имени показывает исходный код функции. Если я использую ko.computed, он будет работать. то, что я сделал ниже, также должно быть в порядке. Может кто-нибудь объяснить мне, почему он показывает исходный код, а не значение.

            <p>First name: <input data-bind="value: firstName" /></p>
            <p>Last name: <input data-bind="value: lastName" /></p>
            <p>Full name: <span data-bind="text: fullName"></span></p>?

Код КО:

function AppViewModel() {

    self = this;

    self.firstName = ko.observable("Bert");
    self.lastName = ko.observable("Bertington");
    self.fullName = function(){
        return  self.firstName() + " " + self.lastName();

    };
}

// Activates knockout.js
ko.applyBindings(new AppViewModel());?

ОБНОВЛЕНИЕ:

Чтобы ответить на вопрос TCM. почему я не хочу использовать ko.computed. не то чтобы я не хотел его использовать, просто потому, что я запутался и не уверен, когда его использовать. Например

следующий код взят из первого урока нокаута. он не использует ko.computegd, но работает.

http://learn.knockoutjs.com/#/?tutorial=intro

self.capName = function(){
    var curVal = self.lastName();
    self.lastName(curVal.toUpperCase());
};

person qinking126    schedule 08.10.2012    source источник


Ответы (1)


Вы должны использовать ko.computed:

 self.fullName = ko.computed(function(){
        return  self.firstName() + " " + self.lastName();

 },this);

и это гарантирует, что всякий раз, когда ваше значение firstName или lastName изменится, изменения будут отражены в вашей функции ko.computed, и вам не придется вручную обновлять значение диапазона.

Для дальнейшего объяснения вы можете прочитать это:

http://knockoutjs.com/documentation/computedObservables.html

Более или менее тот же пример приведен по этой ссылке.

Если вы не хотите использовать ko.computed, перейдите по этой ссылке: http://jsfiddle.net/2RPsw/ 10/

person TCM    schedule 08.10.2012
comment
я знаю, что ko.computed заставит его работать, но я не понимаю, почему его неиспользование вызовет проблемы. - person qinking126; 08.10.2012
comment
@feelexit: вы видели мою ссылку на jsfiddle? Вам не хватает круглых скобок в вашей привязке полного имени. - person TCM; 08.10.2012
comment
да, я понял, почему мой код не работает, я должен использовать fullName(), на мой взгляд. - person qinking126; 08.10.2012