toggleProperty将组件的所有属性设置为默认值
EmberJS: toggleProperty set all properties of a Component to a default value
我试图在Ember 2.0.1中实现嵌套组件,但是当在动作处理程序中使用toggleProperty
函数时,我得到了一个奇怪的行为。
第一个组件看起来像:
// ./components/comp-1.js
import Ember from 'ember';
export default Ember.Component.extend({
prop1: false,
hello: "Default text of comp-1",
_changeHello: function() {
this.set('hello', 'Text set by comp-1');
}.on("init"),
actions: {
customAction1() {
this.toggleProperty('prop1');
}
}
});
.
// ./templates/components/comp-1.hbs
<button {{action 'customAction1'}}>{{hello}}</button>
第二个是:
// ./components/comp-2.js
import Ember from 'ember';
export default Ember.Component.extend({
data: [],
_doSomeImportentStuff: function() {
var data = this.get('data');
data = [{name: 'Text set by comp-2', bool: false},
{name: 'Text set by comp-2', bool: true}];
this.set('data', data);
}.on("init")
});
.
// ./templates/components/comp-2.hbs
{{#each data as |d|}}
{{comp-1 hello=d.name prop1=d.bool}}
{{/each}}
组件comp-2
创建了两个名称为的按钮。Text由comp-1设置。如果我单击一个按钮,文本更改为由comp-2设置的文本,因为在动作处理程序customAction1
中调用的函数this.toggleProperty('prop1')
的执行。如果我删除此功能或从./templates/components/comp-2.hbs
中删除prop1
的设置,那么一切都按预期工作,即按钮的文本始终保持为 comp-1设置的文本。
为什么toggleProperty
函数会设置其他属性?
我做错了什么吗?
在操作的行为可以在这里看到:http://ember-twiddle.com/90798b4952deb4a83de1
在我看来,你通过将两个不同的数据块绑定到init
上的相同属性来创建一个bug。您将comp-1
的hello
设置为comp-1
的init
上的Text set by comp-1
,并将其绑定到comp-2
的init
上的d.name
。
你可能期望hello
的价值只是解决最后的问题,然后从那里开始工作,但你遇到了一个双向数据绑定的问题,并描绘了一个很好的例子,为什么Ember社区正在远离双向绑定并拥抱DDAU。
我认为这只是你偶然发现的,因为我无法想象这种情况在野外发生,但以防万一,使用Ember.computed.oneWay
:
export default Ember.Component.extend({
prop1: false,
readOnlyHello: Ember.computed.oneWay('hello'),
_changeHello: function() {
this.set('readOnlyHello', 'Text set by comp-1');
}.on("init"),
actions: {
customAction1() {
this.toggleProperty('prop1');
}
}
});
在comp-1
的模板中使用{{readOnlyHello}}
代替{{hello}}
。
如果你需要将comp-2
中的d.bool
与comp-1
中的按钮切换,你也应该遵循这里的DDAU。您将发送一个动作到comp-2
,并让comp-2
执行切换。
- 将属性设置为未定义时未通知观察者
- 是否有任何内置方法可以更改JavaScript对象'的属性设置为某个值
- 附加'沙箱'属性设置为动态创建的iframe以停止重定向
- 如何将按钮的数据属性设置为输入[type=text]中设置的任何值
- 在jquery中,从同一对象的属性设置输入字段和标签的正确方法是什么
- 当可见属性设置为 false 时,使用 JavaScript 删除空格
- 无法使用 Snap.SVG将“填充”属性设置为“继承”
- 使用jQuery为属性设置新值
- 是否可以通过属性's值,并将属性设置为parentNode
- 如何使用按钮的jsp点击事件将属性设置为struts-bean
- 在ember.js记录上使用toJSON,将其中一个属性设置为null
- javascript函数属性设置器中的延迟
- 添加“;选中'属性设置为jquery中的复选框
- jQuery/JavaScript按属性设置数组
- Dojo.将JSon中的属性设置为HTML属性
- 将class属性设置为元素不适用于javascript和jquery
- 将属性设置为对对象的引用
- 如何将显示属性设置为与内联!重要的
- jQuery-根据HTML属性设置CSS维度
- 为什么我不能在 JavaScript 中将对象属性设置为空字符串