我试图渲染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/
我不知道的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