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

數組通常充滿非空元素,錯誤也是一樣的。爲了簡單起見,我添加了空的對象。問題在於什麼導致問題,無論數組中有什麼。 –