【问题标题】:bind Knockoutjs arrays to Bootstrap slider将 Knockoutjs 数组绑定到 Bootstrap 滑块
【发布时间】:2017-12-12 12:34:13
【问题描述】:

我正在尝试在 web 应用程序中实现引导滑块并使用 knockoutjs 进行数据处理。

Javascript

$(document).ready(() => {
    function ViewModel() {
        singleValue  = ko.observable(20)
        arrayValues  = ko.observableArray([20, 50])            
    }
    ko.applyBindings(ViewModel)
})

HTML

<input 
  type                ='text' 
  data-slider-min     = 0 
  data-slider-max     = 100
  data-slider-step    = 1 
  data-slider-tooltip ='hide'
  data-provide        ='slider'
  data-slider-value   = 20
  data-bind           = 'value: singleValue'
/>

<p data-bind='text: singleValue'></p> 

效果很好。如果我更改滑块的值,则 p 中的值会相应更改。

<input 
  type                ='text' 
  data-slider-min     = 0 
  data-slider-max     = 100
  data-slider-step    = 1 
  data-slider-tooltip ='hide'
  data-provide        ='slider'
  data-slider-value   = [20, 40]
  data-bind           = 'value: arrayValues'
/>

<p data-bind='text: arrayValues()'></p> 
// output is 20,50, so knockout is taking precedence, 
// because I set the initial value to [20, 40] in html

如果我更改滑块的值,则值似乎会相应更改。但它不再是一个数组,它是一个字符串值。但是最小值和最大值会随着滑块的变化而正确变化。

<p data-bind='text: arrayValues()[0]'></p>

这里渲染站点时的输出为 20。这是我所期望的。 但是当我开始移动滑块时,数组变成了一个字符串,输出变为 2,即 20,40 的第一个字符。

有谁知道我做错了什么?

【问题讨论】:

    标签: javascript twitter-bootstrap knockout.js slider


    【解决方案1】:

    我相信&lt;input&gt;&lt;textarea&gt; 等的值绑定真的只是理解字符串值。 &lt;select&gt; 不是这样,它接受任意数据类型,甚至是对象。

    我的建议是解决这个问题。在下面的示例中,我使用可写计算将 '20,40' 解析为您描述的形式的数组。您可以使用data-bind = 'value: val' 提供这样的计算结果。

    let _val = ko.observable([20, 50]);
    let val = ko.computed({
      read: () => _val(),
      write: v => {
        _val(v.split(',').map(n => parseInt(n)));
      },
    });
    
    console.log(val());
    val('20,40');
    console.log(val());
    &lt;script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.2/knockout-min.js"&gt;&lt;/script&gt;

    【讨论】:

    • 谢谢 svschmidt!这成功了!没有我想要的那么好,但它有效。感谢您提供的信息,该输入仅将字符串作为值除外!一个问题:你使用了 let _val = ko.observable([20, 50])。为什么不使用 observableArray?
    • @HexXx 很高兴我能帮上忙!老实说,我在回答的时候并没有想到 observableArrays。我认为您可以轻松地改用一个。
    猜你喜欢
    • 2013-01-03
    • 2019-07-10
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多