2017-08-02 56 views
-1

我是Knockout.js的新手,我发现一个下拉的代码部分永远不会被更新。下面是代码:下拉不更新Knockout.JS

<div class="col-sm-12 col-xs-9"> 
    <select class="bs-select" data-width="100px" data-bind="value: measurement"> 
     <option>Gallons</option> 
     <option>Pounds</option> 
     <option>Days</option> 
    </select> 
</div> 

的Javascript:

var viewModel = function (data) { 
var self = this; 
self.measurement = ko.observable(measurement); 
} 
ko.applyBindings(viewModel) 

无论我选择从下拉列表中选择,它显示为加仑。如果我更改订单并首先放入天或磅,即使我改变它,它仍然是天或磅。 让我知道如果我失去了一些东西。

编辑1:我尝试将值添加到选项列表。不改变这个问题。

<option value="Pounds">Pounds</option>                    
<option value="Days">Days</option>                    
<option value="Gallons">Gallons</option> 
+1

那么,这个问题就是缺少你所有的JS。不知道你还错过了什么! – Steji

+0

您在'

+0

@Steji为什么需要JS的基本下拉功能? – Testing123

回答

1

您可能需要绑定选项。

http://knockoutjs.com/documentation/options-binding.html

这里是一个小提琴。

https://jsfiddle.net/0o89pmju/24/

<select class="form-control" data-width="100px" data-bind="value: measurement, options: availablemeasurements"> 
    </select> 

JS

function viewModel() { 
    var self = this; 
    this.measurement= ko.observable(''); 
    this.availablemeasurements=ko.observable(['Pounds', 'Day', 'Gallons']); 
} 

如果你不希望使用的选项结合,只是用,似乎工作,以及价值。

<select class="form-control" data-width="100px" data-bind="value: measurement"> 
     <option>Pounds</option> 
     <option>Day</option> 
     <option>Gallons</option> 
    </select> 

这里是那个小提琴。

https://jsfiddle.net/0o89pmju/25/

+0

是的,是搞清楚是这种情况。我的方法可行吗? – Testing123

+1

这听起来很可怕,我保证它不是:)看看绑定,'value'和'options',代码非常简单:https://github.com/knockout/knockout/blob/master /src/binding/defaultBindings/value.js和https://github.com/knockout/knockout/blob/master/src/binding/defaultBindings/options.js。这样你就可以看到简单的值绑定没有考虑到的选项中还会发生什么。您还需要参考'selectExtensions':https://github.com/knockout/knockout/blob/4391eb9b9b5d8b5b481d364f54800585215552b6/src/binding/selectExtensions.js – Milimetric

+0

长话短说,您需要设置下拉列表的值以特定的方式。 – Milimetric

4

这里是一个工作的jsfiddle你追求的是什么:

https://jsfiddle.net/njbLqpmq/

HTML:

<div class="col-sm-12 col-xs-9"> 
    <select class="bs-select" data-width="100px" data-bind="value: measurement"> 
     <option value="Pounds">Pounds</option> 
     <option value="Days">Days</option> 
     <option value="Gallons">Gallons</option> 
    </select> 
</div> 

JS:

var viewModel = function (data) { 
    var self = this; 
    self.measurement = ko.observable(); 
} 
ko.applyBindings(viewModel) 
+0

小提琴似乎工作正常。您对代码做出的任何特定更改?我有相同的代码,但不适用于我的应用程序。 – Testing123

+0

测量是可观察的,就像在我的答案中一样,并且是html绑定的? –

+0

是啊,看起来很相似。检查我最新的编辑。 – Testing123