如何避免在初始化数据绑定下拉列表时触发订阅
How to avoid subscriptions from firing on the initialization of data-bound dropdowns?
我想找到最佳实践,以避免在页面启动时启动可观察到的订阅。
问题:
当你有类似下面描述的例子时,启动时会显示警报,这是不需要的:
foo.someProperty = ko.observable(null);
foo.someProperty.subscribe(function () { alert(foo.someProperty()); });
不便的解决方案:
到目前为止,我一直在使用以下解决方案:
foo.someProperty.subscribe(function () {
if (TriggersEnabled()) { alert(foo.someProperty()) };
});
TriggersEnabled
检查避免了回调执行,但此解决方案要求创建TriggersEnabled
属性。此外,它必须在启动前设置为false,在完成页面加载后设置为true。
问题
我能避免这种情况吗?有没有其他方法可以达到同样的效果?
根据您提供的fiddle,事件正在触发,因为您绑定到select元素的默认值不是列表中的值。因此,当选择列表显示时,它会更改绑定到第一个选项的可观测值。
解决此问题的方法是确保绑定到select元素的observable的默认值是有效值。
示例:
var page = new PageVM();
function PageVM () {
var vm = this;
vm.someProperty = ko.observable(''); //Provide a default value that will be in the select list
vm.someProperty.subscribe(function () { alert(vm.someProperty()); });
};
ko.applyBindings(page);
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>
foo.someProperty
<select data-bind="value: someProperty">
<!-- make sure the first option matches the default value of someProperty -->
<option value="">Select...</option>
<option value="01">Option 01</option>
<option value="02">Option 02</option>
</select>
相关文章:
- 如何使用jQuery选择下拉列表的值
- 将jsp文件下拉列表中的选定项分配给一个java变量(比如String selection)
- Javascript按钮下拉列表
- jQuery表单添加不适用于下拉列表
- 用每小时的差值填充数组/列表-从下拉列表中给定两个时间值
- 禁用jQuery中的下拉列表
- 如何在按钮中显示下拉列表中选定的元素
- 如何在从多选下拉列表中选择选项值时动态生成文本框
- 如何使用PHP和JS级联三个下拉列表
- 如何在使用剑道 MVVM 下拉列表时强制选择第一项
- 语义ui如何使用javascript启用或禁用下拉列表
- 无法使用PHP动态设置下拉列表中的值
- 如何根据对具有多行的先前列表的选择来动态加载下拉列表
- 下拉列表在使用z索引放置在前面后停止工作
- 从多维嵌套json数组创建下拉列表
- 如何在剑道下拉列表中按文本和值搜索
- 使用下拉列表筛选列表(ul>li)
- 如何避免引导下拉列表中子 elemnet 的单击事件
- 拆分大型下拉列表以避免具有巨大的功能
- Asp.net Javascript避免基于其他下拉列表的下拉列表中的重复值