控制Flash插件与Knockout.js,冲突jQuery.tmpl和淘汰赛可排序(Control

2019-08-04 18:52发布

我试图渲染HTML嵌入使用Knockout.js'本地模板院系Flash对象。 jQuery.tmpl做这项工作得很好,但是我不能用它由于与基因敲除可排序插件冲突。

这里的Flash插件与本地模板quirking的例子: http://jsfiddle.net/7y3ub/35/
在Chrome中,玩家只要一直没有出现。 在Firefox中,玩家将显示出来,如果你改变了通道,而复选框被选中。 复查箱然而让玩家再次消失。

在“如果”的结合是必要的,因为这样的事实,有可能是Flash插件的加载与卸载许多情况下,在页面的持续时间。

从我所知道的,HTML需要所有的对象/嵌入标签进入可见DOM的时间到位。 这就是为什么jQuery.tmpl将是我的情况很好。 我试过形成HTML字符串自己,但我不知道如何使用,维护,新的标记包含绑定。

底线,我要么需要一个方式来即时渲染HTML,同时还支持绑定,或找到一种方法,使jQuery.tmpl和淘汰赛排序compatable彼此。


下面是不相容的例子: http://jsfiddle.net/7y3ub/41/
在该示例中的代码将很好地工作,如果你只是unreference jQuery.tmpl。 http://jsfiddle.net/7y3ub/42/

在控制台中的错误信息似乎暗示上下文没有被适当地调整,或者说隐含的foreach不执行。 其中,该消息成为即使在这样的调整更不寻常的SubItem的对象用简单的字符串替换: http://jsfiddle.net/7y3ub/43/

Answer 1:

我不知道的jQuery的TMPL不兼容。 我将不得不考虑进一步。 这将是很好不过,如果你并不需要使用jQuery TMPL只是为了这个目的。

看起来像某些浏览器(Chrome尤其是)与动态设置的问题src的上embed元素。 这里有一个问题: http://code.google.com/p/chromium/issues/detail?id=69648 。 这里有一个类似的问题: 动态更改嵌入式视频SRC在IE / Chrome浏览器(Firefox中的作品)

因此,为了使这项工作,我们必须避免使用attr的元素结合,因为它会导致这个问题。

一个简单的方法来完成这项工作,而不必回落到一个不同的模板引擎是使用html的具有约束力object元素。 这将是这样的:

<p data-bind="if: StreamEnabled">
  <object width="320" height="240" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" data-bind="html: Template">
  </object>
</p>​

使用JavaScript喜欢:

var ViewModel = function() {
    this.StreamEnabled = ko.observable(false);
    this.Channel = ko.observable("saltwatercams");
    this.Template = ko.computed(function() {
        return "<param name=\"movie\" value=\"" + this.Channel() + "\"></param><embed width=\"320\" height=\"240\" type=\"application/x-shockwave-flash\" src=\"http://cdn.livestream.com/grid/LSPlayer.swf?channel=" + this.Channel() + "\"></embed>";
    }, this);
};

不幸的是,我们需要建立“模板”在我们的视图模型,但它似乎是一个合理的解决方法,这一问题。

样品在这里: http://jsfiddle.net/rniemeyer/CWPwj/

作为替代方案,您可以考虑使用自定义绑定。 也许一个克隆节点,应用ATTR结合,并与原来的交换它。 这将避免在嵌入视图模型的模板。 我看不到其他用途,这个结合其他比这个场景,但这里是一个简单的实现: http://jsfiddle.net/rniemeyer/rGP7z/



文章来源: Controlling Flash Plugins with Knockout.js, Conflicting jQuery.tmpl and Knockout-Sortable