Sov*_*iut 3 javascript html5 ember.js
我有一些作为工作流程一部分的入职步骤.这些步骤包含在<details>我第一次访问时默认打开的元素中.要关闭详细信息面板,用户可以单击确认他们理解步骤的按钮,或者只需单击<summary>元素,这是元素的默认行为.
<details open={{not isOnboarded}}>
<summary>Getting Started</summary>
<p>some steps about getting started</p>
<button type="button" {{action 'completeOnboarding'}}>I Understand</button>
</details>
Run Code Online (Sandbox Code Playgroud)
不幸的是,由于<details>元素open本地切换属性,它似乎正在删除Ember的绑定.
如何绑定Ember中的细节?
Ember将state(isOnboarded)存储在内存中,并在状态发生变化时重新呈现DOM.但是,Ember没有检查DOM来协调状态.请注意,这不是Ember的限制,大多数js框架也是这样工作的.DOM的不断协调在计算上是不可行的.
您可以阻止默认行为,并使用Ember来切换它.
controller.js
import Ember from 'ember';
export default Ember.Controller.extend({
appName: 'Ember Twiddle',
isOpen: true,
actions: {
toggleDetails () {
this.toggleProperty('isOpen')
},
onNativeToggle (e) {
// e here is the native HTMLEvent
e.preventDefault()
this.send('toggleDetails') // triggers the 'toggleDetails' action
}
}
});
Run Code Online (Sandbox Code Playgroud)
template.hbs
<details open={{isOpen}} onclick={{action 'onNativeToggle'}}>
<summary>Copyright 1999-2014.</summary>
<p> - by Refsnes Data. All Rights Reserved.</p>
<p>All content and graphics on this web site are the property of the company Refsnes Data.</p>
</details>
<button onclick={{action 'toggleDetails'}}> Click to Toggle via Ember </button>
Run Code Online (Sandbox Code Playgroud)
Ember Twiddle:https://ember-twiddle.com/65a4cffe7e8fb8bcf41ff7064cc6d524 ? openFiles = templates.application.hbs%2C