我们从一个新的应用程序开始,使用Ember 3.8和bootstrap / SASS。似乎有两个可用插件在Ember中支持引导程序,ember-boostrap和ember-cli-bootrap-sassy。
虽然前者为大多数bootstrap功能实现了ember组件,并通过其自己的实现“替换”了原始的bootstrap.js,但对于后者,看来我仍然可以使用所有原始的组件和js实现。
乍一看,我对ember-cli-bootrap-sassy更加满意,因为我仍然可以使用网络上的所有引导示例,并且拥有“定制”版本的bootstrap.js似乎与我。另外,ember-bootstrap的所有引导功能都没有实现,但是我仍然需要?看来我可能会以使用ember-bootstrap的应用程序结尾,但是对于未实现的事情还使用了各种“变通方法”。
由于我在该领域没有太多经验,所以很高兴获得专家的一些建议和见解。
答案 0 :(得分:10)
因此,首先免责声明:作为ember-bootstrap
的作者,我在这里肯定有点偏颇! ;)
但是我认为我有强烈的理由赞成ember-bootstrap
,否则我将不会投入大量的工作。因此,主要的一点是它遵循Ember的编程模型,而直接使用bootstrap.js
却并非如此,并且在Ember应用程序中常常会感到尴尬:
ember-bootstrap
中的组件严格遵循Ember中所谓的“ Data down Actions up”(DDAU)编程模型$('#myModal').modal('show')
)不同如果听起来太抽象了,请以这个模态组件的简单示例为例。在ember-bootstrap
中,您将执行以下操作:
{{#bs-modal-simple
open=this.showConfirmation
title="Please confirm"
onSubmit=(action "submit")
onHidden=(action "close")
}}
Some {{dynamic}} content.
{{/bs-modal-simple}}
showConfirmation
状态设置为true
(甚至使用计算属性自动计算状态)来显示模态。在bootstrap.js
中,您必须以某种方式必须调用$('#myModal').modal('show')
bootstrap.js
,您必须先在JavaScript中附加事件监听器(然后将其删除!):
$('#myModal').on('hidden.bs.modal', function (e) { // do something })
。 {{#if ...}}
块中或更改路线)。 从我的角度来看,这些是要点,但还有更多要点:
ember-bootstrap
与Ember的测试层配合得很好。使用bootstrap.js
时,您有时会遇到问题,例如,代码使用setTimeout()
调用来处理过渡,这是Ember的测试助手不知道的,因此不必等待。但是通常您必须依靠测试来确定您的应用处于“稳定状态”。 ember-bootstrap
而是集成到Ember的所谓Run中
循环,所以await click('#show-modal-button')
之类的东西就可以工作(即,当Promise解析时,该模式将是完全可见的)。bootstrap.js
需要jQuery,而ember-bootstrap
则不需要。还要添加一件事:以上所有内容适用于需要JavaScript的Bootstrap组件。对于徽章这样的静态组件,您只需编写适当的Bootstrap风格标记。实际上,ember-bootstrap
故意不为这些琐碎的Bootstrap组件提供组件,以免增加任何无用的开销。
答案 1 :(得分:1)
为了阐明Simon的观点,Ember Bootstrap实际上并未使用任何底层bootstrap.js javascript来工作,因此您失去了这种依赖性。并且由于引导程序(至少为4.0)需要jQuery,因此您将两者捆绑在一起。
使用Ember-Bootstrap需要额外的0个jquery才能工作(并且可以在我的jQuery免费应用程序上工作)。