首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KnockoutJS +聚合物:键合断裂(铬外)

KnockoutJS +聚合物:键合断裂(铬外)
EN

Stack Overflow用户
提问于 2014-07-16 12:31:07
回答 2查看 1.7K关注 0票数 3

编辑:这只出现在Chrome之外

我使用KO来使用foreach绑定来填充元素。在硬币的另一边,我已经加载了聚合物,以利用谷歌的材料设计风格。

问题是,在platform.js文件(聚合物)中似乎有一个断言试图接管data-bind,即使聚合物没有使用数据绑定属性。

想知道是否有人有使用这两种方法的经验,或者有什么建议?错误如下:

Error: Unable to process binding "template: function (){return { foreach:sessions} }" Message: Assertion failed

JSFiddle:http://jsfiddle.net/Rmp6c/3/

编辑:我已经设置了调试版本,第31行的ShadowDOM/src/wrappers.js中似乎有一个assert(b)函数正在传递一个布尔值。这被一个Node.js文件称为100次,要解决这个问题,需要进行相当大的重写。

我的修复方法是使用jQuery插入带有foreach绑定的DOM元素,然后在$(document).ready(function() {});标记中应用KO绑定。这似乎适用于所有浏览器。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-29 09:27:19

我的修复方法是使用jQuery插入带有foreach绑定的DOM元素,然后在$(document).ready(function() {});标记中应用KO绑定。这似乎适用于所有浏览器。

虽然这不是一个很好的解决办法--这是唯一一个正常工作的方法。我已经联系了KnockoutJS的Sanderson,相信他正在调查此事。我之所以只使用Knockout自定义组件来修复这个问题,是因为聚合物组件按照谷歌的新设计规范提供了材料设计,而我正在构建的网络前端与我公司的移动应用程序有着内在的联系,所以我想保持一个连贯的设计。

票数 0
EN

Stack Overflow用户

发布于 2014-12-01 16:01:18

如果有人有此问题,这是因为您使用的是ko.applyBindings(viewModel)方法,而在这里,淘汰赛使用window.document.body获取节点,而后者又忽略了webcomponents.js使用的shadowDOM填充。

为了解决这个问题,您有两个选项,使用应用绑定方法的第二个重载--您可能会以这种方式获得一个成功包装的节点。

或者,您可以在淘汰赛声明之后立即加载这个垫片(一些从knockout.validation借来的样板:

代码语言:javascript
复制
(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);
        }
    }
}));

希望这能帮助任何有同样问题的人。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24780854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档