【问题标题】:Cannot write a value to a ko.computed unless you specify a 'write' option除非您指定“写入”选项,否则无法将值写入 ko.computed
【发布时间】:2013-10-10 00:11:54
【问题描述】:

我正在尝试在另一个计算属性中使用计算属性,当我运行代码时,我在控制台中收到以下错误。

除非您指定“写入”选项,否则无法将值写入 ko.computed

function AppViewModel() {
    var self = this; 
    self.firstName = ko.observable('rahul');
    self.lastName = ko.observable('sharma');
    self.fullName = ko.computed(function() {
      return self.firstName() +' ' + self.lastName();
    });
    self.upperFullName = ko.computed(function() {
      return self.fullName.toUpperCase();
    });  
}
// Activates knockout.js
ko.applyBindings(new AppViewModel()); 

这里是html代码和js fiddle link

<p><input data-bind="value: firstName"></p>

<p><input data-bind="value: lastName"></p>

<p><input data-bind="value: fullName"></p>

<p> <span data-bind="text: upperFullName"> </span> </p>

【问题讨论】:

  • 当输入不是可写计算时,为什么要使用它?
  • @Anders 对不起,我没听懂你?我是 knockoutjs 的新手。
  • @Anders 好的,你想说,当没有对 upperFullName 进行计算时,我为什么要使用它作为计算值。是的,你是对的。但我怎样才能显示大写全名?
  • 不,我的意思是,由于您使用输入和值绑定来绑定“fullName”,因此表明您要写入可观察对象,但您使用只读可观察对象

标签: knockout.js computed-observable


【解决方案1】:

self.fullName 是一个函数,返回计算值。

self.upperFullName = ko.computed(function() {
  return self.fullName().toUpperCase();
});  

注意括号!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 2018-06-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多