1

我有一个名为 foo 的可观察对象,然后是一个与 foo 互连的计算对象

foo = ko.observable();
bar = ko.computed(function(){
    read: function() {
        var blah = parseFloat(self.foo()),
            qux = blah + 1;

        return qux;
    },
    write: function(value)
    {
        value = parseFloat(value);
        self.foo(value - 1);
    },
});

我有这个文本字段

<input type="text" name="foo" id="foo" placeholder="Foo" class="border-bottom" data-bind="value: foo"/>

我有这个 jQuery Mobile Range Slider

<input class="ratio" type="range" name="slider-percent" min="0.00" max="100.00" data-highlight="true" step="0.1" data-bind="value: bar"/>

然后是 KO 的调试标记

<pre data-bind="text: ko.toJSON($data, null, 2)"></pre>

这是我遇到的一些问题

  1. 当我更新foo文本字段时,我看到bar调试标记的值发生了变化,但它并没有反映在实际的滑块中。
  2. 当我尝试移动滑块时,没有任何反应。既不更新foo也不bar更新。

有没有办法解决这个问题?

4

1 回答 1

0

这是一个工作小提琴:http: //jsfiddle.net/r7Ruc/1/

计算声明中有一个额外的 function()。如果您同时使用读取和写入,则应该将对象传递给计算,而不是函数。

代码,因为“到 jsfiddle.net 的链接必须附有代码”。

var CTR = function () {
    var self = this;
    self.foo = ko.observable();
    self.bar = ko.computed({
        read: function () {
            var blah = parseFloat(self.foo()),
                qux = blah + 1;

            return qux;
        },
        write: function (value) {
            console.log(value);
            value = parseFloat(value);
            //self.share(value - 1);
        },
    });
}
var c = new CTR();
ko.applyBindings(c);
于 2013-09-23T07:26:12.513 回答