如何在淘汰.js中实现可计算的可观察量

How to implement computable observables in knockout.js

本文关键字:可计算 观察 实现 淘汰 js      更新时间:2023-09-26

我想添加一些方法。this指令对我无济于事。

var viewModel = function () {
    firstName = ko.observable("Mike");
    lastName = ko.observable("Rassel")
    //fullName = ko.computed(function () { 
         //return firstName() + " " + lastName(); }, viewModel);
}
viewModel.fullName = ko.computed(function () { 
    return this.firstName() + " " + this.lastName(); }, viewModel);

演示:http://jsfiddle.net/gJUqK/

在本地使用 2.1.0 它的工作。

firstNamelastNamefullName 应该是myViewModel实例的属性。

如文档中所述,这将起作用。添加了self,因为在fullName可观察的回调函数中,this会指向其他内容。

function myViewModel()
{
    var self = this;
    this.firstName = ko.observable("Mike");
    this.lastName = ko.observable("Rassel");
    this.fullName = ko.computed(function() {
        return self.firstName() + ' ' + self.lastName();
    })
}
ko.applyBindings(new myViewModel());

在这里工作:http://jsfiddle.net/gJUqK/1/

部分问题在于,按照您调用 viewModel 的方式,this 绑定到 fullName 函数的全局对象。

您可以通过将viewModel创建构造函数并向其原型添加fullName来开始更正此问题:

var ViewModel = function () {
  this.firstName = "Mike";
  this.lastName = "Rassel";
}
ViewModel.prototype.fullName = function () { 
  return this.firstName + " " + this.lastName; 
};
var view = new ViewModel(); // Call ViewModel with new
console.log(view.fullName()); // Prints "Mike Rassel" 

我不明白淘汰赛的东西,但希望这应该让你更接近解决方案。