2014-09-02 78 views
2

简单的淘气问题,可能会踢我自己,当我知道解决方案。淘汰赛:不能通过选择价值功能

我想将select的值传递给一个函数,这样我就可以从数组中删除该项(所以我可以使用其他选择的裁减数组 - 基本上每个值只能选择一次) ,但是select是传递'Object object'而不是所选的值。

我以为默认选择值作为第一个参数传递,所以我不知道发生了什么。任何提示mucho赞赏。

fiddle here

HTML:

<p>Sample rate: 
    <select data-bind="options: sampleRates, value: selectedSampleRate0, event: {change: addSrate}"></select> 
</p> 

JS:

window.onload = startKnockout; 

function AppViewModel() { 
    var self = this; 
    self.sampleRates = ko.observableArray([192000, 176400, 96000, 88200, 48000, 44100]); 
    self.selectedSampleRate0 = ko.observable(); 

    self.addSrate = function (x) { 
     alert(x); 
    } 


    return self; 
} 

function startKnockout() { 
    ko.applyBindings(new AppViewModel()); 
}; 

回答

3

任何KO event结合处理的第一个参数是当前的datacontext,所以你的情况你AppViewModel和第二参数包含event对象。

所以你需要写:

self.addSrate = function (viewModel, event) { 
    alert(event.target.value); 
} 

作为一种替代解决方案,您可以subscribeselectedSampleRate0的变化来实现相同的功能:

self.selectedSampleRate0.subscribe(function (newValue){ 
    alert(newValue); 
}) 

演示JSFiddle.

+0

真棒感谢。我不知道在哪里可以找到任何进入这个深度的文档,淘汰网站是非常基础的。据推测它假设了很多领域知识。 – 2014-09-02 06:11:37

+0

大概如果我在remove语句中使用这个值,它会将该元素从数组中取出,以便使用该数组的进一步选择将包含更少的值? – 2014-09-02 06:17:17

+0

也许你看过文档中的错误地方:你可以在这里找到事件绑定的细节:http://knockoutjs.com/documentation/event-binding.html#note-2-accessing-the-event-object -or-passing-more-parameters和订阅:http://knockoutjs.com/documentation/observables.html#explicitly-subscribeing-to-observables。关于删除:是的,如果你从下拉列表中删除该数组的项目:http://jsfiddle.net/ng3uw9t4/ – nemesv 2014-09-02 06:44:04