编辑:这仅出现在 Chrome 之外
我使用 KO 来使用 foreach 绑定填充元素。另一方面,我加载了 Polymer 以利用 Google 的 Material Design 样式。
问题是 platform.js 文件(Polymer)中似乎有一个断言试图接管data-bind
即使 Polymer 不使用数据绑定属性。
想知道是否有人有使用这两者的经验,或者有什么建议?错误如下:
Error: Unable to process binding "template: function (){return { foreach:sessions} }"
Message: Assertion failed
JSFiddle:http://jsfiddle.net/Rmp6c/3/ http://jsfiddle.net/Rmp6c/3/
编辑:所以我已经设置了调试版本,并且在 ShadowDOM/src/wrappers.js 的第 31 行中似乎有一个assert(b)
正在传递布尔值的函数。这被 Node.js 文件调用了 100 次,要解决这个问题似乎需要相当大的重写。
我对此的解决方法是使用 jQuery 通过 foreach 绑定插入 DOM 元素,然后将我的 KO 绑定应用到$(document).ready(function() {});
标签。这似乎适用于所有浏览器。
如果有人遇到此问题,那是因为您正在使用ko.applyBindings(viewModel)
方法,在这里淘汰赛使用window.document.body
获取节点,这又会错过 webcomponents.js 使用的 ShadowDOM polyfill。
为了解决这个问题,您有两个选择,使用 apply Bindings 方法的第二个重载 - 您可能会通过这种方式获得成功包装的节点。
或者,您可以在淘汰声明之后立即加载此填充程序(从淘汰赛借用的一些样板。验证:
(function (factory) {
// Module systems magic dance.
if (typeof require === "function" && typeof module === "object") {
// CommonJS or Node: hard-coded dependency on "knockout"
factory(require("knockout"));
} else if (typeof define === "function" && define["amd"]) {
// AMD anonymous module with hard-coded dependency on "knockout"
define(["knockout"], factory);
} else {
// <script> tag: use the global `ko` object, attaching a `mapping` property
factory(ko);
}
}(function (ko) {
if (typeof (ko) === undefined) { throw 'Knockout is required, please ensure it is loaded before loading this shim'; }
if (WebComponents && WebComponents.flags.shadow && ShadowDOMPolyfill) {
var _originalApplyBindings = ko.applyBindings;
ko.applyBindings = function (viewModel, rootNode) {
if (rootNode) {
rootNode = ShadowDOMPolyfill.wrapIfNeeded(rootNode);
} else {
rootNode = ShadowDOMPolyfill.wrapIfNeeded(window.document.body);
}
_originalApplyBindings(viewModel, rootNode);
}
}
}));
希望这可以帮助任何遇到同样问题的人。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)