Knockout 2.0无法解析绑定

时间:2016-02-22 13:45:31

标签: javascript apache netbeans knockout.js osx-elcapitan

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

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()阻止了一个奇怪的字符(“”),这个字符对我的代码是不可见的,直到我使用google chrome dev控制台工具。因此我的理论是我的localhost设置可能有问题。

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

  1. Mac OSX El capitan

  2. Netbeans 8.1

  3. Apache 2(httpd24)

  4. 运行代码时没有任何错误的Grunt

  5. Knockout 2.0

  6. 我的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'处,它将添加这个奇怪的字符。

    先谢谢你!如果您有任何关于如何调试这种情况的提示,我将非常感激!

1 个答案:

答案 0 :(得分:0)

似乎与KO 2.0具体相关。我在那里得到一个错误,但不是3.0。这是一个非常神可怕的约束力。通常,绑定应该是简单的表达式,复杂的表达式应该在您的viewmodel中。

是否有理由无法更新Knockout版本?

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

Handler
/**
 * Determine if string 2 overlaps string 1 at all
 * @param st1 The first string to check.
 * @param st2 The second string to check
 * @param n The minimum number of characters.
 * @return The character index in string 2 that 
 *         overlaps with something in string 1
 *         a -1 indicates no overlap
 */
static int st1Pos;
static int st2Pos;
static int getOverlap(String st1, String st2, int n)
{
    st1Pos = -1;
    st2Pos = -1;
    if ((n <= 0) || (st1.length() < n) || (st2.length() < n))
    {
        return -1;
    }
    int index;
    for (int i = 0; i < st1.length() - n; i++)
    {
        String sub = st2.substring(i, i + n);
        index = st2.indexOf(sub);
        if (index >= 0)
        {
            st1Pos = index;
            st2Pos = i;
            return i;
        }
    }
    return -1;
}