0

メソッドをいくつか追加したい。そして、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 のローカルでその作業。

4

2 に答える 2

4

、およびはfirstName、インスタンスのプロパティである必要があります。lastNamefullNamemyViewModel

ドキュメントで説明されているように、これは機能します。監視可能なコールバック関数内で別のものを指すため、selfが追加されます。fullNamethis

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/

于 2012-05-17T15:53:30.273 に答える
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" 

ノックアウトのことはわかりませんが、これで解決に近づくことを願っています。

于 2012-05-17T15:42:38.577 に答える