gpt4 book ai didi

javascript - Knockout.js ReferenceError - 无法解析绑定(bind) $data 未定义

转载 作者:行者123 更新时间:2023-12-02 17:25:26 25 4
gpt4 key购买 nike

我正在编写 Jasmine 测试,该测试使用来自 WebSQL 数据库的模拟数据库响应。在以下代码段中我收到错误。

        function createCalculatedField(calculatedValue, objectContext) {
var computedObservable = ko.computed({
read: function () {
return ko.unwrap(ko.bindingProvider.instance.parseBindingsString("text: " + calculatedValue, objectContext).text);
},
write: function (value) {
computedObservable.notifySubscribers(value);
},
owner: objectContext
});

我收到的错误消息如下:

ReferenceError: Unable to parse bindings. Bindings value: text: ko.unwrap(PagingStartIndex) + $context().length Message: $data is not defined

我已打印出函数输入,并将错误重现到 Chrome 控制台,如下面的屏幕截图所示。

enter image description here

检查knockout-3.0.0.custom.min.js parseBindingsString 方法时失败。

function (b,c,d,e){try{var f=this.bindingCache,h=b+(e&&e.valueAccessors||""),g;if(!(g=f[h])){var n,k="with($context){with($data||{}){return{"+a.expressionRewriting.preProcessBindings(b,e)+"}}}";n=new Function("$context","$element",k);g=f[h]=n}return g(c,d)}catch(p){throw p.message="Unable to parse bindings.\nBindings value: "+
b+"\nMessage: "+p.message,p;}}

我可以看到$data是内部knockout.js参数。相同的代码在生产环境中运行得很好,所以我假设我没有在某处设置某些内容,您能否为我指出如何调试此问题的方向,因为我此时完全没有想法。

最佳答案

在内部,Knockout 使用以下动态函数来评估您的表达式

function($context, $element) {
with($context) {
with($data||{}) {
return {text: ko.unwrap(PagingStartIndex) + $context().length};
}
}
}

如果您查看通常通过 knockout 传递到 parseBindingsString 的对象,它看起来像......

{
$data: {...},
$index: ko.observable(),
$parent: {...},
$parentContext: ko.bindingContext,
$parents: [...],
$root: {...}
}

该对象图通常是通过调用 new ko.bindingContext(...) 创建的或者,如果您处于自定义绑定(bind)中,bindingContext.createChildContext(...)

查看您的屏幕截图,它看起来像 objectContext 是一个包含 2 个元素的 observableArray,我还假设您在 jasmine 测试中手动创建了 objectContext 实例。

因此,您传递到 parseBindingString 的对象(作为 $context 进入动态函数)没有 $data 字段,这就是引发异常的原因。

应该具有与普通的 bindingContext 对象类似的对象图,其中 $data 的值是您的模型

{
$data: ko.observableArray: ( [
{
Fields:{...},
Insert: false,
SetFields:[]
}, {
Fields:{},
Insert: false,
SetFields: []
}] ),
$index: ko.observable(),
...
}

但是,在这种情况下,您仍然会收到一条错误消息,因为 $data 对象中缺少 PagingStartIndex,就像您的绑定(bind)表达式与生产系统中的模型不匹配一样。

关于javascript - Knockout.js ReferenceError - 无法解析绑定(bind) $data 未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23546792/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com