【问题标题】:KnockoutJS - jQuery Mobile Range Slider not updatingKnockoutJS - jQuery Mobile Range Slider 不更新
【发布时间】:2013-09-28 00:13:57
【问题描述】:

我有一个名为 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. 当我尝试移动滑块时,没有任何反应。 foobar 都没有更新。

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

【问题讨论】:

    标签: jquery-mobile knockout.js


    【解决方案1】:

    这是一个有效的小提琴:http://jsfiddle.net/r7Ruc/1/

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

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

    【讨论】:

    • 感谢 pax162 的回复。我测试了jsfiddle。在我看来,当我移动滑块时,它仍然没有更新 foo 可观察的。我对这两个变量的目标是,如果一个变量发生变化,另一个变量就会更新。当foo 更改时您的代码会更新,而当我移动滑块时foo 不会更新。
    • 我更改了self.share(value-1),因为它应该是self.foo(value-1)。我不确定你为什么要评论它。我取消了它的注释,然后它在 jsfiddle 中运行良好。
    • 另一件事是我正在使用 jQuery Mobile。这不应该包含在 jsfiddle 中吗?
    • 嗯,成功了,可能页面中已经包含了jquery/jqueryui
    • 我使用的是 jQuery Mobile,而不是 jQuery 或 jQuery UI。我检查了 jsfiddle,它似乎没有被包括在内,因为滑块应该看起来不同。
    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2011-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多