运行 自定义绑定后默认绑定
Run default binding after custom binding
我有一个名为 groupedOptions
的淘汰自定义绑定,它将 select
列表的选项与 optgroup
绑定在一起。这与标准选项绑定相同,但包括处理选项组的逻辑。
绑定在 knockout v2.3 下工作正常,但在升级到 v3.3 后停止工作。更新后它将不再正确绑定值。
查看新版本中值绑定的源代码,它有一些代码可以在选项绑定后告诉它 运行:
ko.bindingHandlers['value'] = {
'after': ['options', 'foreach'],
'init': function (element, valueAccessor, allBindings) {
...
将其更改为:
ko.bindingHandlers['value'] = {
'after': ['options', 'foreach', 'groupedOptions'],
'init': function (element, valueAccessor, allBindings) {
...
可以使用,但对我来说似乎有点老套。有没有人知道最好的做法是什么。
换句话说:如果我有一个自定义绑定需要 运行 在 knockout 中定义的绑定之前,我将如何在不编辑 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 问题吗?
我有一个名为 groupedOptions
的淘汰自定义绑定,它将 select
列表的选项与 optgroup
绑定在一起。这与标准选项绑定相同,但包括处理选项组的逻辑。
绑定在 knockout v2.3 下工作正常,但在升级到 v3.3 后停止工作。更新后它将不再正确绑定值。
查看新版本中值绑定的源代码,它有一些代码可以在选项绑定后告诉它 运行:
ko.bindingHandlers['value'] = {
'after': ['options', 'foreach'],
'init': function (element, valueAccessor, allBindings) {
...
将其更改为:
ko.bindingHandlers['value'] = {
'after': ['options', 'foreach', 'groupedOptions'],
'init': function (element, valueAccessor, allBindings) {
...
可以使用,但对我来说似乎有点老套。有没有人知道最好的做法是什么。
换句话说:如果我有一个自定义绑定需要 运行 在 knockout 中定义的绑定之前,我将如何在不编辑 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 问题吗?