Javascript knockout.js ReferenceError-无法分析绑定$data未定义
我正在编写Jasmine测试,它使用来自WebSQL数据库的模拟数据库响应。在下面的代码段中,我得到一个错误Javascript knockout.js ReferenceError-无法分析绑定$data未定义,javascript,jquery,debugging,knockout.js,jasmine,Javascript,Jquery,Debugging,Knockout.js,Jasmine,我正在编写Jasmine测试,它使用来自WebSQL数据库的模拟数据库响应。在下面的代码段中,我得到一个错误 function createCalculatedField(calculatedValue, objectContext) { var computedObservable = ko.computed({ read: function () { return ko.unwrap(ko.bindingProvider.ins
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控制台中
检查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};
}
}
}
如果查看通常通过敲除传递到parseBindingsString的对象,它看起来像
{
$data: {...},
$index: ko.observable(),
$parent: {...},
$parentContext: ko.bindingContext,
$parents: [...],
$root: {...}
}
此对象图通常是通过调用new ko.bindingContext(…)
创建的,如果您在自定义绑定中,则调用bindingContext.createChildContext(…)
从您的屏幕截图来看,objectContext似乎是一个包含2个元素的observableArray,我还假设您在jasmine测试中手动创建了objectContext实例
因此,传递到parseBindingString(作为$context进入动态函数)的对象没有$data字段,这就是引发异常的原因
对象图应该类似于普通bindingContext对象,其中$data的值是您的模型
i、 e
但是,由于$data对象中缺少PagingStartIndex,因此在此实例中仍然会收到错误消息,就像您的绑定表达式与生产系统中的模型不匹配一样。在这种情况下,您能否解释一下使用
ko.bindingProvider.instance.parseBindingsString
方法试图实现的目标?您创建的ko.computed
的目的是什么?
{
$data: ko.observableArray: ( [
{
Fields:{...},
Insert: false,
SetFields:[]
}, {
Fields:{},
Insert: false,
SetFields: []
}] ),
$index: ko.observable(),
...
}