KnockoutJS + Polymer:绑定中断(Chrome 之外)

2024-01-23

编辑:这仅出现在 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(使用前将#替换为@)

KnockoutJS + Polymer:绑定中断(Chrome 之外) 的相关文章

随机推荐