26 November 2015

关于knockoutjs 如何处理 select 元素的change事件,看到群里一直有人在提问,这里做一次小结。

思路:

每次用户操作select,选择了某一项,那么select的值会发生变化,并且新的值是用户选择的值。那么我只要知道select的值变化情况,就知道select的change事件了。

代码实现

既然有思路了,那就写code吧

<p>
    Destination country:
    <select data-bind="options: availableCountries,value: country"></select>
</p>

<script type="text/javascript">
	
    var viewModel = {
        country: ko.observable(),
        availableCountries: ko.observableArray(['France', 'Germany', 'Spain'])
    };
    ko.applyBindings(viewModel);

    viewModel.country.subscribe(function(newValue) {
        alert("The select's new name is " + newValue);
    });

</script>

把上面的代码拷贝到你的文本编辑器中,记得引入knockoutjs,就可以查看效果了。可以看到,每次选择select,并发生变化,都会alert选择的值。

代码解读

那么上面代码怎么运行的呢?

可以看到,我给 select绑定了两个值,分别是 options和 value,前者是用来绑定要展示的select option,后者是记录select的值的。每次选择select,那么select的值会发生变化,那么我跟踪select的value变化就可以了。

那么是如何跟踪select值的变化的呢?

subscribe 这个函数,针对observable,你可以指定一个订阅,当 observable 变量发生变化,就会对外发送消息,这时候注册subscribe订阅的地方就可以收到变化的通知了。

完。