1

私のアプリケーションには、jQuery Templatesプラグインを使用して Knockout テンプレートをバインドするバインディングが 1 つあります。Knockout3.xにアップグレードしてから、次のエラーが表示されるようになりました。

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

上記のエラーにより、Knockout ver. 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>

4

1 に答える 1

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>

于 2016-01-22T20:29:15.087 に答える