【问题标题】:Knockoutjs: bind dynamic iframes in foreach to parentKnockoutjs:将 foreach 中的动态 iframe 绑定到父级
【发布时间】:2013-12-10 23:43:38
【问题描述】:

我正在尝试绑定 iframe 和父窗口,以便我可以更改/更新 iframe 或父窗口中的 observable,并且两个视图都将更新为新值。

这是工作示例:http://jsfiddle.net/NnT78/26/

我已经调整了一些我发现的示例代码,并使其运行良好,如下所示;

HTML:

<iframe src="http://fiddle.jshell.net/zVPF8/11/show/" data-bind="bindIframe: $data"></iframe>

但是当我将相同的 html 放入 foreach 绑定时,它会出错;

HTML:

<ul data-bind="foreach: iframes">
    <li>
        <iframe data-bind="attr: {src: src}, bindIframe: $data"></iframe>
    </li>
</ul>

错误:

Uncaught ReferenceError: Unable to parse bindings.
Bindings value: text: someProperty
Message: someProperty is not defined

这是我的 Knockoutjs ViewModel 代码;

ko.bindingHandlers.bindIframe = {
  init: function(element, valueAccessor) {
    function bindIframe() {
        try {
            var iframeInit = element.contentWindow.initChildFrame,
                iframedoc = element.contentDocument.body;
        } catch(e) {
            // ignored
        }
        if (iframeInit)
            iframeInit(ko, valueAccessor());
        else if (iframedoc){
            ko.applyBindings(valueAccessor(), iframedoc);
        }
    };
    bindIframe();
    ko.utils.registerEventHandler(element, 'load', bindIframe);
  }
};

function ViewModel() {
    var self = this;
    self.someProperty = ko.observable(123);

    self.clickMe = function(data, event) {
        self.someProperty(self.someProperty() + 1);
    }

    self.anotherObservableArray = ko.observableArray([
        { name: "Bungle", type: "Bear" },
        { name: "George", type: "Hippo" },
        { name: "Zippy", type: "Unknown" }
    ]);

    self.iframes = ko.observableArray([
        { src: "http://fiddle.jshell.net/zVPF8/6/show/", type: "Bear" },
        { src: "http://fiddle.jshell.net/zVPF8/6/show/", type: "Hippo" },
        { src: "http://fiddle.jshell.net/zVPF8/6/show/", type: "Unknown" }
    ]);
};

// Bind outer doc
ko.applyBindings(new ViewModel());

请参阅http://jsfiddle.net/NnT78/26/ 以获取单个 iframe 工作示例和 foreach 绑定中的动态 iframe 不工作的示例。

提前致谢!

【问题讨论】:

    标签: iframe knockout.js


    【解决方案1】:

    foreach 绑定中,$data 是不同的;它是数组中的当前项。您可以通过将 iframe 更改为绑定到 $root 来修复您的示例。

    <iframe data-bind="attr: {src: src}, bindIframe: $root"></iframe>
    

    http://jsfiddle.net/mbest/NnT78/29/

    【讨论】:

    • 太棒了!!这正是我所缺少的,感谢 heaps 完美!
    猜你喜欢
    • 2014-02-21
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2013-02-21
    • 2021-11-26
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    相关资源
    最近更新 更多