【问题标题】:Issue with .each() and eval().each() 和 eval() 的问题
【发布时间】:2013-04-10 00:12:06
【问题描述】:

我正在使用 Knockout 创建一个使用来自 json 对象的数据进行评估的方程式

var EqunCreated = ["Salary", "Tax", "Gross_Salary"];

$.each(EqunCreated, function (index, lhs) {
    var Equation = "self." + lhs + "=ko.computed(function(){ return self.Eqn() && eval(self.Eqn()).toFixed(2); })";
    console.log(eval("self." + lhs + "=ko.computed(function(){ return self.Eqn() && eval(self.Eqn()).toFixed(2); })"));
    console.log(lhs);
});

我在这里遇到了问题。报错

function h(){if(0<arguments.length)return"function"===typeof v?v.apply(d,arguments):j(Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.")),this;n||g();b.r.Wa(h);return l}

但是,如果我评估 self.Eqn(),我会得到正确的答案。

如何解决这个问题?

【问题讨论】:

  • @dreamweiver:这是问题所在。请阅读
  • 您没有显示错误。您正在显示一段代码。
  • function h(){if(0
  • 是的。这是因为您正在控制台记录该功能。这不是错误。 .computed 返回一个新函数。您正在将其写入控制台。

标签: javascript jquery json knockout.js eval


【解决方案1】:

不太清楚 self 是什么,但我认为你不需要使用 eval

var EqunCreated = ["Salary", "Tax", "Gross_Salary"];

$.each(EqunCreated, function (index, lhs) {
    var Equation = self[lhs] = ko.computed(function(){ return self.Eqn() && parseFloat(self.Eqn()).toFixed(2); });

    console.log(Equation());
});

【讨论】:

  • 自我是$this。我必须通过 eval 因为这个字符串是绑定 ko observables。我必须评估一下
  • 但您只是在评估 .computed 对自身属性“lhs”的评估。您不需要为此使用 eval。
  • 而不是第二个eval,您可能应该使用parseFloat(或首先使用Math.round
猜你喜欢
  • 1970-01-01
  • 2013-09-28
  • 1970-01-01
  • 2021-05-31
  • 2012-02-13
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
相关资源
最近更新 更多