请帮助我理解为什么这个计算的observable无法访问observable.

iRa*_*esh 3 knockout.js

这是小提琴 - http://jsfiddle.net/iRamesh/36N4m/

不确定为什么计算的observable没有返回任何值.我知道如何使它工作,但不知道为什么当前的代码不起作用.请帮忙

RP *_*yer 11

计算的observable在创建时立即进行评估.在您的情况下,viewModel尚未创建,因此这会导致错误.

几种选择:

- 在初始对象文字之外创建它:

var viewModel = {
    firstName: ko.observable("r"),
    lastName: ko.observable("j"),
 };
viewModel.fullName = ko.computed(function() {
        return viewModel.firstName();
});
Run Code Online (Sandbox Code Playgroud)

- 在函数中创建视图模型:

var ViewModel = function() {
    this.firstName = ko.observable("r");
    this.lastName = ko.observable("j");
    this.fullName = ko.computed(function() {
            return this.firstName();
    }, this);
};

ko.applyBindings(new ViewModel());
Run Code Online (Sandbox Code Playgroud)


Joh*_*apa 7

对象文字很容易创建,这使它们很棒.但这是我更喜欢使用函数创建视图模型的原因之一.使用对象文字,您可以扩展视图模型并创建计算...或者使用该函数,您可以在一个函数语句中完成所有操作,正如@RPNiemeyer指出的那样.

另一种选择是使用我最喜欢的揭示模块模式:http://jsfiddle.net/johnpapa/36N4m/1/

var viewModel = (function() {
    var 
        firstName = ko.observable("r"),
        lastName = ko.observable("j"),
        fullName = ko.computed(function() {
            return firstName();
        });
        return {
            firstName: firstName,
            lastName: lastName,
            fullName: fullName
        }
})();

ko.applyBindings(viewModel);?
Run Code Online (Sandbox Code Playgroud)