复选框绑定的选中状态倒置在Chrome
Checkbox binding of checked state inverted in Chrome
我使用Ember v2.5.1和Ember data v2.6.2,并且我有一系列嵌套组件来呈现类别的分层树。在最底层组件categories-tree-node
中有一个闭包动作,它调用categories-select
组件动作中的toggleAddCategory
函数,并向上传递相关的类别对象。
它在Safari中按预期工作,但由于某种原因,检查状态在Chrome和FF中被反转。奇怪的是,当复选框被更改时,值本身的选中状态绑定在模板的其他位置正确地呈现。
我在这里创建了一个演示,如果你尝试在Chrome/FF vs Safari中勾选/取消勾选框,你应该会看到这个问题。是否有一种更好的方法来处理这种带有复选框选中状态的操作绑定?我读到过,在Ember 2及以上的版本中,使用观察者被认为是一种反模式,而且当我尝试这样做时,它对子类别不起作用。
好的,所以你的旋转显示状态在Chrome中不变,但在Safari中改变。
这很可能是Safari中jQuery的一个bug,因为Ember。复选框设置checked
使用jQuery prop方法:
change() {
set(this, 'checked', this.$().prop('checked'));
}
一个变通的解决方案是使用复选框作为一个尖括号组件(默认情况下有单向绑定),以确保checked
绑定不被input
组件更改,而是使用传入的闭包操作来手动切换选中状态。
这也符合Ember推荐的使用Data Down - Actions Up模式设置组件父属性的最佳实践。
注意:您可能希望使用onchange
事件而不是onclick
。
Child components/categories-tree-node.hbs
<input type="checkbox"
checked={{category.checked}} <!-- checked is just passed from above, not set within the component -->
onchange={{action toggle category}} <!-- onchange calls the passed in action which toggles checked -->
id={{concat elementId '-' category.slug}}
>
...
父节点 components/categories-select.js
export default Ember.Component.extend({
// ...
actions: {
toggleAddCategory(category) {
category.toggleProperty('checked'); // toggle the property yourself
// ...
}
}
});
如果您的父操作只执行切换而不执行其他操作,则可能不需要它,可以在components/categories-tree-node.hbs
中使用mut helper进行切换:
<input type="checkbox"
checked={{category.checked}} <!-- checked is just passed from above, not set within the component -->
onchange={{action (mut category.checked) value="target.checked"}} <!-- onchange automatically sets category.checked -->
id={{concat elementId '-' category.slug}}
>
- 当firefox和chrome时,XMLHttpRequest状态始终为零
- 当单击<a>链接在chrome扩展中,popup.html如何保持打开状态
- Chrome应用程序:无法检索文件加载状态
- Chrome开发工具:保存javascript状态
- Chrome动画CSS3三维立方体与悬停状态问题
- 如何在按下鼠标时在 Chrome 中保持悬停状态
- 样式为 -webkit-外观的单选按钮:复选框:Chrome 中的不确定状态
- 我如何知道chrome.experimental.socket的状态
- 仅当标签页处于非活动状态时,才会显示 Chrome 桌面通知
- 当用户将鼠标悬停在 Chrome 或 Firefox 中的链接上时,悬停状态未激活
- Chrome - 即使先检查也无法读取未定义的属性“状态”
- 如果在 Chrome 中点击链接,加载微调器将保持打开状态
- Chrome:为什么 serviceWorker.ready 解析为处于“已安装”状态的服务工作者注册
- 维护登录状态 om chrome 打包应用程序
- Chrome,Safari - 未捕获的类型错误:无法读取 null 的属性“状态”
- 在导航到新页面时,使 Chrome 扩展程序弹出窗口保持打开状态
- Chrome / Javascript SetTimeout在计算机进入睡眠状态后卡住
- 在谷歌Chrome开发者工具网络选项卡中,状态完成意味着什么
- 更改Chrome状态栏中显示的URL
- 我的页面加载被Chrome状态冻结“;正在等待api.mixpanel.com“-这是什么,我该如何避免