KnockoutJS - jQuery Mobile Range Slider无法更新

时间:2013-09-23 07:07:00

标签: jquery-mobile knockout.js

我有一个名为foo的observable,然后是一个与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. 当我尝试移动滑块时,没有任何反应。 foobar都不会更新。
  3. 有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:0)

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

计算声明中有一个额外的函数()。如果同时使用read和write,则应将对象传递给computed,而不是函数。

代码,因为“链接到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);