1

我的应用程序有一个使用jQuery Templates插件绑定Knockout模板的绑定。由于升级到淘汰赛3.x我开始看到一个错误:带Knockout 3和jQuery模板的意外令牌

Uncaught SyntaxError: Unable to process binding "template: function(){return { name:'tmpl',foreach:$data.children} }" 
Message: Unexpected token) 

上述错误不允许我结合升级到版本淘汰赛后,开始工作。 3.x(例如3.4.0)。使用旧版本(例如2.1.0)它可以正常工作。

该错误可能是由与jQuery Templates插件有冲突引起的。不幸的是,我必须在我的应用程序中使用它。

可能是什么原因和解决方案?

var viewModel = function() { 
 
    var self = this; 
 
    self.children = ko.observableArray(
 
    [{}] 
 
); 
 
}; 
 
ko.applyBindings(new viewModel());
<script src="https://code.jquery.com/jquery-1.11.3.js"></script> 
 
<script src="https://rniemeyer.github.com/KnockMeOut/Scripts/jquery.tmpl.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-debug.js"></script> 
 

 
<div data-bind="template: { name: 'tmpl', foreach: $data.children }"> 
 
</div> 
 

 
<script id="tmpl" type="text/html"> 
 
    <div data-bind="template: { name: 'tmpl', foreach: $data.children, templateOptions: { parentList: $data.children } }"> 
 
    </div> 
 
</script>

+0

是否有使用,而不是jQuery的模板特殊原因内置的模板引擎? – Tomalak

+0

是的,我认为是,代码是使用jQuery模板绑定数据以查看的应用程序的一部分。没有它,它不会运行:http://jsfiddle.net/piglin/UAcC7/1837/ –

+0

那么,jQuery模板看起来和工作完全不同,从淘汰赛模板。您正尝试在jQuery模板引擎中使用挖掘模板。比较[文档](http://knockoutjs.com/documentation/template-binding.html#note-6-using-jquerytmpl-an-external-string-based-template-engine)。我仍然认为你根本不需要jQuery模板引擎。 (“没有它就不会运行”并不是一个非常令人信服的理由。) – Tomalak

回答

0

让您的空数组内摆脱空的对象。无论如何都没有意义。

var viewModel = function() { 
 
    var self = this; 
 
    self.children = ko.observableArray([]); 
 
}; 
 
ko.applyBindings(new viewModel());
<script src="https://code.jquery.com/jquery-1.11.3.js"></script> 
 
<script src="https://rniemeyer.github.com/KnockMeOut/Scripts/jquery.tmpl.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/knockout/3.4.0/knockout-debug.js"></script> 
 

 
<div data-bind="template: { name: 'tmpl', foreach: $data.children }"> 
 
</div> 
 

 
<script id="tmpl" type="text/html"> 
 
    <div data-bind="template: { name: 'tmpl', foreach: $data.children, templateOptions: { parentList: $data.children } }"> 
 
    </div> 
 
</script>

+0

数组通常充满非空元素,错误也是一样的。为了简单起见,我添加了空的对象。问题在于什么导致问题,无论数组中有什么。 –