gpt4 book ai didi

javascript - 使计算属性依赖于 emberjs 中另一个对象的所有属性

转载 作者:行者123 更新时间:2023-11-30 05:42:10 26 4
gpt4 key购买 nike

是否可以使一个属性依赖于另一个对象的所有属性?例如:( also in jsfiddle ):

html:

<script type="text/x-handlebars" >
{{outlet}}
</script>

<script type="text/x-handlebars" data-template-name="index">
<p>Weapon damage: {{ input value=model.activeWeapon.damage}} </p>
<p>Hero damage: {{ model.weaponDamagePerSecond }}</p>
</script>

JavaScript:

App = Ember.Application.create({});

App.Weapon = Ember.Object.extend({
damage: null,
speed: null
});

App.Hero = Ember.Object.extend({
activeWeapon: null,
strength: null,
weaponDamagePerSecond: function() {
var weapon = this.get('activeWeapon');
console.log('weapon damage:' + weapon.get('damage'));
console.log('weapon speed:' + weapon.get('speed'));
console.log('strength:' + this.get('strength'));
console.log (weapon.get('damage') + this.get('strength')) * weapon.get('speed');

return (1.0 * weapon.get('damage') + 1.0 * this.get('strength')) * weapon.get('speed');
}.property('activeWeapon', 'strength')
//}.property('activeWeapon.damage', 'activeWeapon.speed', 'strength')
// the above line will make the example work, but it is a bit painful to
// have to specify all the attributes needed of activeWeapon.
});

App.IndexRoute = Ember.Route.extend({
model: function() {
return App.Hero.create({
activeWeapon: App.Weapon.create({
damage: 40,
speed: 2
}),
strength: 8
});
}
});

是否有可能让 weaponDamagePerSecondactiveWeapon 上的任何属性更新时更新,而必须手动指定所有属性(就像在注释掉的代码中一样)?

最佳答案

不,但是编写一个监视所有内容并触发您的计算属性在其更新时更新的观察者真的很容易。我不一定推荐这样做,但可以做到。

http://jsfiddle.net/5gS59/

App.Weapon = Ember.Object.extend({
damage: null,
speed: null,
version: 0,
watchingEverything: function(){
console.log('hello');
this.incrementProperty('version');
}.observes('damage','speed')
});


weaponDamagePerSecond: function() {
var weapon = this.get('activeWeapon');
console.log('weapon damage:' + weapon.get('damage'));
console.log('weapon speed:' + weapon.get('speed'));
console.log('strength:' + this.get('strength'));
console.log (weapon.get('damage') + this.get('strength')) * weapon.get('speed');

return (1.0 * weapon.get('damage') + 1.0 * this.get('strength')) * weapon.get('speed');
}.property('activeWeapon.version', 'strength')

你也可以只用一个属性而不是一个观察来做类似的事情:

http://jsfiddle.net/XsuxA/1/

关于javascript - 使计算属性依赖于 emberjs 中另一个对象的所有属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20204727/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com