第二个计算函数导致Knockout代码出错

时间:2014-01-09 23:33:26

标签: javascript knockout.js

下面的Knockout代码使用可观察和计算的observable来跟踪两个文本框的值。

标记:

GBP:
<input type="textbox" data-bind="value: sendGbp" />
<br />
Exchange Rate: £1 GBP 
<br />
<input type="textbox" data-bind="value: sendFx" />

使用Javascript:

var transferItem = {
    receiveCurrencyCode : "JPY",
    exchangeRate : 123.223122
}

function viewModel(item) {

    var self = this;

    var initval = parseFloat(100).toFixed(2);
    self.sendGbp = ko.observable(initval);

    /** commented out error source
    self.labelFxRate = ko.computed(function() {
        return exchangeRate + " " + item.receiveCurrencyCode;
    });    
    **/

    self.sendFx = ko.computed({
        read: function () {
            return parseFloat(self.sendGbp() * item.exchangeRate).toFixed(2);
        },
        write: function (val) {
            var valGbp = parseFloat(val);
            self.sendGbp((valGbp / item.exchangeRate).toFixed(2));
        }
    });
}
ko.applyBindings(new viewModel(transferItem));

这个工作正常,直到我想添加另一个计算的observable来显示

这包括在viewModel代码中注释掉该部分并将这个数据绑定标签添加到标记中:

Exchange Rate: £1 GBP  = <label data-bind="text: labelFxRate" />

但是这会导致错误并且标记无法完全呈现

应用第二个计算变量以显示transferItem对象的其他属性的正确方法是什么?

正在进行中的完整版本是jsfiddle:http://jsfiddle.net/WuvZD/3/

1 个答案:

答案 0 :(得分:2)

似乎你不能使用自闭标签作为标签。 您在注释掉的代码中也使用了return exchangeRate但它应该是return item.exchangeRate

更新了小提琴:http://jsfiddle.net/WuvZD/4/