我们有一个几乎完全由 knockout 驱动的网站,我们需要支持所有主流浏览器,包括回到 IE7(而非 IE6)的 Internet Explorer。
Chrome 已经支持我们真正关心的几乎所有 HTML 5 功能,而 Modernizr 处理 CSS hack 的能力堪称冠军。但有时我们仍然不得不求助于 polyfill,两个著名的例子是 placeholder属性和最近的 <details>元素。
大多数 polyfill 都是或依赖于 jQuery 插件,这在理论上是很棒的。不幸的是,它们在处理动态加载的内容时也往往效率低下 - 当您使用 knockout(或任何模板引擎,真的)时吨。更复杂的是,我们正在使用 knockout 作为真正的 MVVM,因此在一堆 JS hack 中没有像样的地方可以鞋拔来重新加载插件(就我们的架构而言,这可能是一件好事,但令人沮丧的是前面)。
我们能够使用 DOMNodeInserted 提出一个半可靠的实现方案Firefox 和 IE9 的事件(我知道已弃用)。不幸的是,它在 IE8 中不起作用,因为 legacy IE doesn't support it而且在那些浏览器中似乎几乎不可能复制。 onreadystatechange起初看起来很有希望,但事件往往会过早触发 - 即使 readyState被显式检查 - 可以这么说,polyfills 没有达到他们的目标。
我们尝试过的唯一在 IE7/IE8 中实际可靠工作的选项是使用重复超时每 50 毫秒重新运行一次 polyfill。不幸的是,这也会不断消耗整个 CPU,甚至将其增加到 100 毫秒会导致 UI 出现明显的延迟,因此不太适合生产使用。
那么:是否有任何可靠的方法将传统的 polyfill 技术与动态内容和模板引擎(如 knockoutjs)相结合,并且适用于至少 IE7 的所有主流浏览器?
(FWIW,我们最终使用 knockout 的 afterRender 绑定(bind)管理了一个变通方法,但这种方法从“polyfill”中提取了“poly”。我希望我们可以一次性编写一些东西算了吧。)
最佳答案
我解决相同问题的方法是将我的大部分 jQuery 插件和一般行为包装在 knockout 绑定(bind) ( http://knockoutjs.com/documentation/custom-bindings.html ) 中。因此,例如,我在每个输入上使用了一个占位符“绑定(bind)”,例如 <input data-bind="placeholder:'Some Placeholder Text'"/>要么简单地设置 placeholder属性或根据需要进行一些 IE hack。
更广泛的解决方案是增加 knockout 绑定(bind)提供程序 ( http://www.knockmeout.net/2011/09/ko-13-preview-part-2-custom-binding.html )。绑定(bind)提供程序是遍历 DOM(加载时和动态加载时)并标识绑定(bind)的东西。默认情况下,这实际上意味着它只是在寻找数据绑定(bind)属性和 ko 注释,但您可以更改它以同时查找占位符、日期或数字输入的输入类型等属性,并添加您的 IE hack。
关于javascript - 是否有一种可靠的跨浏览器方式来使用 polyfills with knockout?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15102651/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
这个问题在这里已经有了答案:Checktoseeifanarrayisalreadysorted?(8个答案)关闭9年前。我只是想知道是否有办法检查数组是否在增加?这是我的解决方案,但我正在寻找更漂亮的方法:n=-1@arr.flatten.each{|e|returnfalseife
我有一个包含多个键的散列和一个字符串,该字符串不包含散列中的任何键或包含一个键。h={"k1"=>"v1","k2"=>"v2","k3"=>"v3"}s="thisisanexamplestringthatmightoccurwithakeysomewhereinthestringk1(withspecialcharacterslike(^&*$#@!^&&*))"检查s是否包含h中的任何键的最佳方法是什么,如果包含,则返回它包含的键的值?例如,对于上面的h和s的例子,输出应该是v1。编辑:只有字符串是用户定义的。哈希将始终相同。 最佳答案
我需要检查DateTime是否采用有效的ISO8601格式。喜欢:#iso8601?我检查了ruby是否有特定方法,但没有找到。目前我正在使用date.iso8601==date来检查这个。有什么好的方法吗?编辑解释我的环境,并改变问题的范围。因此,我的项目将使用jsapiFullCalendar,这就是我需要iso8601字符串格式的原因。我想知道更好或正确的方法是什么,以正确的格式将日期保存在数据库中,或者让ActiveRecord完成它们的工作并在我需要时间信息时对其进行操作。 最佳答案 我不太明白你的问题。我假设您想检查
我的日期格式如下:"%d-%m-%Y"(例如,今天的日期为07-09-2015),我想看看是不是在过去的七天内。谁能推荐一种方法? 最佳答案 你可以这样做:require"date"Date.today-7 关于ruby-检查日期是否在过去7天内,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/32438063/
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI
question的一些答案关于redirect_to让我想到了其他一些问题。基本上,我正在使用Rails2.1编写博客应用程序。我一直在尝试自己完成大部分工作(因为我对Rails有所了解),但在需要时会引用Internet上的教程和引用资料。我设法让一个简单的博客正常运行,然后我尝试添加评论。靠我自己,我设法让它进入了可以从script/console添加评论的阶段,但我无法让表单正常工作。我遵循的其中一个教程建议在帖子Controller中创建一个“评论”操作,以添加评论。我的问题是:这是“标准”方式吗?我的另一个问题的答案之一似乎暗示应该有一个CommentsController参