挖空 2.0 无法解析绑定

Knockout 2.0 Unable to parse bindings

本文关键字:绑定 挖空      更新时间:2023-09-26

最近我从另一个开发人员那里得到了一堆代码,我应该使用这些代码来构建其他功能。不幸的是,我无法在本地运行它。奇怪的是,我应该使用的门户在服务器上运行得很好,但是当我尝试在本地运行它时,我收到以下异常

Uncaught Error: Unable to parse bindings.
Message: SyntaxError: Unexpected identifier;
Bindings value: css: {
                                         'make-primary':(lala.viewModels.transacFilterTabsViewModel.getSyncList().resultsetLength() > 0 && !lala.viewModels.transacQuickactionsViewModel.operationInProgress() && (lala.viewModels.transacFilterTabsViewModel.getSyncList().captureButtonIsEnabled() || lala.viewModels.transacFilterTabsViewModel.getSyncList().refundButtonIsEnabled() || lala.viewModels.transacFilterTabsViewModel.getSyncList().abortButtonIsEnabled())),

我注意到的一件奇怪的事情是,在.refundButtonIsEnabled()块周围显示了一个奇怪的字符("Â"),在我使用谷歌Chrome开发控制台工具之前,我的代码看不到该字符。因此,我的理论是我的本地主机设置可能有问题。

为了运行此代码,我正在使用:

  1. Mac OSX El Capitan

  2. Netbeans 8.1

  3. Apache 2 (httpd24)

  4. 运行代码而没有任何错误的咕噜声

  5. 淘汰赛 2.0

我的 html 代码是:

<div class="span6 actions-panel-bottom" data-bind="css: {
                                         'make-primary': (lalal.viewModels.transacFilterTabsViewModel.getSyncList().resultsetLength() > 0 && !lalal.viewModels.transacQuickactionsViewModel.operationInProgress() && (lalal.viewModels.transacFilterTabsViewModel.getSyncList().captureButtonIsEnabled() || lalal.viewModels.transacFilterTabsViewModel.getSyncList().refundButtonIsEnabled()|| lalal.viewModels.transacFilterTabsViewModel.getSyncList().abortButtonIsEnabled()))">

'parseBindingsString': function(bindingsString, bindingContext, node) {
        try {
            var bindingFunction = createBindingsStringEvaluatorViaCache(bindingsString, this.bindingCache);
            return bindingFunction(bindingContext, node);              
        } catch (ex) {
            throw new Error("Unable to parse bindings.'nMessage: " + ex + ";'nBindings value: " + bindingsString);
        }
    }
});

我想提一下,在代码失败之前,其他几个绑定将成功运行,并将在"make-primary"处停止,它将添加这个奇怪的字符。

提前谢谢你!如果您对如何调试这种情况有任何提示,我将不胜感激!

似乎

与KO 2.0特别相关。我在那里收到错误,但不是在 3.0 中。这是一个非常可怕的绑定。通常,绑定应该是简单的表达式,而复杂的表达式应该在视图模型中。

有什么原因不能更新淘汰赛版本吗?

下面的代码片段只是一个最小的重现。将其复制到新代码段,并在更改版本并运行它时观察控制台。

ko.applyBindings({});
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.0.0/knockout-min.js"></script>
<div class="span6 actions-panel-bottom" data-bind="css: {
                                         'make-primary': (lalal.viewModels.transacFilterTabsViewModel.getSyncList().resultsetLength() > 0 && !lalal.viewModels.transacQuickactionsViewModel.operationInProgress() && (lalal.viewModels.transacFilterTabsViewModel.getSyncList().captureButtonIsEnabled() || lalal.viewModels.transacFilterTabsViewModel.getSyncList().refundButtonIsEnabled()|| lalal.viewModels.transacFilterTabsViewModel.getSyncList().abortButtonIsEnabled()))"></div>