javascript - 自定义绑定(bind)后运行默认绑定(bind)

标签 javascript knockout.js binding

我有一个名为 groupedOptions 的 knockout 自定义绑定(bind),它将 select 列表的选项与 optgroup 绑定(bind)。这与标准选项绑定(bind)的作用相同,但包括处理选项组的逻辑。

绑定(bind)在 knockout v2.3 下工作正常,但在升级到 v3.3 后停止工作。更新后将不再正确绑定(bind)值。

查看新版本中值绑定(bind)的源代码,它有一些代码告诉它在选项绑定(bind)之后运行:

ko.bindingHandlers['value'] = {
  'after': ['options', 'foreach'],
  'init': function (element, valueAccessor, allBindings) {
    ...

将其更改为:

ko.bindingHandlers['value'] = {
  'after': ['options', 'foreach', 'groupedOptions'],
  'init': function (element, valueAccessor, allBindings) {
    ...

可以工作,但对我来说似乎有点老套。有谁知道执行此操作的最佳实践方法是什么。

换句话说:如果我有一个自定义绑定(bind)需要在 knockout 中定义的绑定(bind)之前运行,我该如何在不编辑 knockout 源的情况下执行此操作?

最佳答案

底行包含实际问题:

If I have a custom binding that needs to be run before a binding that is defined in knockout, how would I do it without editing the knockout source?

就像这样:

ko.bindingHandlers['value'].after = ko.bindingHandlers['value'].after.concat('customBinding');

在此处(间接)查看它的工作情况:

ko.bindingHandlers['customBinding'] = {
  init: function() { console.log("The `customBinding` was initialized."); }
};

ko.bindingHandlers['value'].after = ko.bindingHandlers['value'].after.concat('customBinding');

console.log(ko.bindingHandlers['value'].after);

ko.applyBindings({
  // *pure* computed, or else it would be evaluated once straight away
  myObs: ko.pureComputed(function() { console.log("The `value` binding was initialized."); })
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.2.0/knockout-min.js"></script>

<input data-bind="customBinding, value: myObs">

PS。您确定没有 XY 问题吗?

关于javascript - 自定义绑定(bind)后运行默认绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34395742/

相关文章:

javascript - 在 JavaScript 中检查单选框

java - 执行逻辑时 Wicket 口加载图标/弹出窗口

css - 在 knockoutjs 中应用 ko.observable 的 css 属性?

wpf - WPF DataGrid问题: why the data output twice?

javascript - 以父子层次结构显示 JSON 数据

javascript - 使用正则表达式包含所有字符

javascript - Bootstrap DatePicker 允许通过键入进行编辑

javascript - knockoutjs html 绑定(bind)不起作用

c# - 如何在 MVC3 中将嵌套的 ViewModel 从 View 绑定(bind)到 Controller?

jquery - 当绑定(bind)到焦点输入并单击时,防止函数触发两次