【问题标题】:Knockout: can't pass select value to function淘汰赛:无法将选择值传递给函数
【发布时间】:2014-10-26 07:05:35
【问题描述】:

简单的菜鸟问题,当我知道解决方案时可能会踢自己。

我正在尝试将一个选择的值传递给一个函数,以便我可以从数组中删除该项目(这样我就可以将缩减的数组用于其他选择 - 基本上每个值只能选择一次),但是选择传递的是“对象对象”而不是选定的值。

我以为选择值默认作为第一个参数传递,所以我不知道发生了什么。任何提示都非常感谢。

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());
};

【问题讨论】:

    标签: javascript arrays select knockout.js onchange


    【解决方案1】:

    任何 KO event 绑定处理程序的第一个参数是当前数据上下文,因此在您的情况下,您的 AppViewModel 和第二个参数包含 event 对象。

    所以你需要写:

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

    作为替代解决方案,您可以在subscribe 上更改selectedSampleRate0 以实现相同的功能:

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

    演示JSFiddle.

    【讨论】:

    • 非常感谢。我不知道在哪里可以找到任何深入到这个深度的文档,淘汰赛网站非常基础。大概它假设了很多领域知识。
    • 大概如果我在删除语句中使用这个值,它会将该元素从数组中取出,这样使用该数组的进一步选择将包含更少的值?
    • 也许您在文档中看错了地方:您可以在此处找到事件绑定的详细信息:knockoutjs.com/documentation/… 和订阅:knockoutjs.com/documentation/…。关于删除:是的,如果您从数组中删除它应该从下拉列表中删除的项目:jsfiddle.net/ng3uw9t4
    猜你喜欢
    • 2014-08-28
    • 2017-01-09
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2021-03-06
    • 2015-11-05
    相关资源
    最近更新 更多