访问可订阅功能中的计算值

时间:2016-10-04 11:03:23

标签: javascript knockout.js

使用我的视图模型时:

<img src="{{ asset('img/stripe.png') }}" style="height:250px;max-width: 100%;">

我试图反转计算值。因此,将显示表格或警告消息。

我创建了以下可订阅功能:

function SummaryViewModel (arrayString) {
//------- Attributes -------
var self = this;

self.Claims = ko.observableArray(namesapce.Helpers.subnamespace.ToCollection(arrayString));

self.ShowTable = ko.computed(function() {
    var collection = ko.unwrap(self.Claims());
    return collection.length > 0;
}, this);

self.showWarningPanel = self.ShowTable.Not();
}

但是,ko.subscribable.fn.Not = function () { return ko.pureComputed(function() { var bool = this(); return !(ko.unwrap(bool)); }); }; 的值不提供计算属性的值。它改为返回当前范围内的所有对象。

最初我将方法标记为this(),这也没有返回计算值。

我一直在参考KO网站上的文档来帮助构建该功能。

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

1 个答案:

答案 0 :(得分:3)

您必须将this传递给您在内部创建的pureComputed

&#13;
&#13;
ko.subscribable.fn.Not = function () {
   return ko.pureComputed(function() {
      return !this();
   }, this);
   // ^^^^ Here, you tell knockout to execute the function with `this`
   //      context. Alternatively, you could use the var `self = this`
   //      pattern.
};

var myObs = ko.observable(true);
var invertedObs = myObs.Not();

myObs(false);

console.log("observable: " + myObs());
console.log("inverted: " + invertedObs());
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
&#13;
&#13;
&#13;