KO:计算的可变观察变量,不用于函数

时间:2018-02-21 12:09:17

标签: knockout.js gruntjs computed-observable

我有三个可观察对象,如下所述:

self.firstName = ko.observable();
self.lastName = ko.observable();
self.middleName = ko.observable();

而且我的computed observable如下所示:

ko.computed(function() {
   var myMiddleName = self.middleName();
   var Id = self.generateId(self.firstName.peek(), self.lastName.peek());
   /* Other Operation */
});

正如您在上面的代码中看到的,当middleName的值发生变化时,我正在调用计算函数。所以我将它分配给名为myMiddleName的临时变量,它实际上并没有在任何地方使用。只是为了调用。

到目前为止一切正常。但是当我运行grunt lint命令时,它会给我一个错误

  

' myMiddleName'被赋值但从未使用过。 (无未使用-VARS)

那我怎么能摆脱这个错误呢?

更新 - 1

删除变量myMiddleName后,如图所示,警告不会出现。这是正确的方法吗?

ko.computed(function() {
   self.middleName();
   var Id = self.generateId(self.firstName.peek(), self.lastName.peek());
   /* Other Operation */
});

1 个答案:

答案 0 :(得分:2)

如评论中@ user3297291所述,解决此问题的正确方法是使用订阅者。如果使用计算,则计算将在可观察的更改时重新计算。如果您只希望在1次可观察的更改时发生这种情况,那么订阅者就可以了。

我猜你的用例远非你的例子,可能有关你的情况的更多细节可以解释这比现有代码更好。

一个简单的例子:



function ViewModel() {

  self.firstName = ko.observable();
  self.lastName = ko.observable();
  self.middleName = ko.observable();

  self.generatedId = ko.observable();

  self.middleName.subscribe(function(newValue) {
    self.generatedId(self.firstName() + " " + self.lastName());
    console.log(self.generatedId())
  });

}

ko.applyBindings(new ViewModel())

<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"></script>

FirstName: <input data-bind="value: firstName" /> <br> MiddleName:
<input data-bind="value: middleName" /> <br> LastName: <input data-bind="value: lastName" /><br>
&#13;
&#13;
&#13;