1

次のモデルを作成しましたが、pureComputed オブザーバブルApprovalIconCSSが関数コンテキストから Approved() オブザーバブルにアクセスできない理由がわかりません。

function KOViewModel() {
    var self = this;
    self.IsAdding = ko.observable(false);
    self.IsEnabled = ko.observable(true);
    self.ApprovalType = ko.observable(0);

    var RowControl = function() {
        return {
            Approved: ko.observable(null),
            ApproverNotes: ko.observable(''),
            ApprovalIconCSS: ko.pureComputed(function() {
                if (this.Approved() == 0)
                    return 'glyphicon glyphicon-remove-circle';
                if (this.Approved() == 1)
                    return 'glyphicon glyphicon-ok-circle';
                if (this.Approved() == 2)
                    return 'glyphicon glyphicon-time';
                return '';
            }, this)
        };
    };

    self.RowControls = ko.observableArray([RowControl()]);
}

コンテキストにアクセスできない理由を誰かが明らかにできるかどうかに感謝します。乾杯!

4

1 に答える 1

1

で呼び出す必要がRowControlsあり、別のオブジェクトを返すのではなく、プロパティを関数のオブジェクトnewにアタッチする必要があります。thisRowControl

var RowControl = function() {
    this.Approved = ko.observable(null);
    this.ApproverNotes = ko.observable('');
    this.ApprovalIconCSS = ko.pureComputed(function() {
        if (this.Approved() == 0)
            return 'glyphicon glyphicon-remove-circle';
        if (this.Approved() == 1)
            return 'glyphicon glyphicon-ok-circle';
        if (this.Approved() == 2)
            return 'glyphicon glyphicon-time';
        return '';
    }, this)
};

self.RowControls = ko.observableArray([new RowControl()]);

リテラル オブジェクトを返す問題は、それがオブジェクトko.pureComputedと共に呼び出されているthisことです。プロパティを追加するのではなく、別のオブジェクトを返す場合thisthisオブジェクトとその結果new RowControl()(つまり、「承認済み」プロパティを持つオブジェクト) は次のようになります。 2 つの異なるオブジェクト。

于 2014-12-16T01:26:55.973 に答える