因此,我在Ember应用程序中有一个计算属性,声明为myComProp: computed('itemTrait', function () {...})
。myComProp属于一个项目模型。在一个单独的组件(listItem)中,我有一个myComProp的别名属性:myAlias: alias('itemModel.myComProp')
。现在listItems是listItems数组的成员,其属性在web应用中呈现。
现在,由于该属性是一个别名,是否有一种方法可以强制计算的属性重新计算?
我尝试过将别名设置为跟踪属性,但这样做会将调用堆栈作为字符串返回,而不是计算函数的实际结果。
更新
增加这一点以便更好地解释。
// itemModel.js
export default parentModel.extend({
//irrelevant properties
myComProp: computed('itemTrait', function() {
// logic
})
});
在其他地方有两个组件,一个是页面中呈现itemModel列表的部分,另一个是itemModel的表示(由list组件从数据存储中获取)
// itemModelRep/component.js
export default Component.extend({
// other properties
myAlias('item.myComProp')
// itemModel is represented in the list by 'item'
});
还有名单:
//itemList.js
export default parentDisplay.extend({
// other properties
get items() {
// this is what is used as the list items
// it basically gets a list of items from the itemModel record set in
// the data store
listOfItems.forEach((item) => {
// Other stuff going on
// Here I want to force the property to recompute
};
}
});
基本上,myComProp会获取一个相关日期,当我用一个新条目更新列表时,我希望重新计算相关日期。
1条答案
按热度按时间mi7gmzs61#
让我看看我是否理解你的问题:
和
当
changeItem
被调用时,itemModel.itemTrait
会发生变化,而listItems
并不表达这些变化?如果是这样的话,问题就不是你的计算属性或别名没有更新,而是列表不知道它需要更新。
快速解决方案:
以下是有关
notifyPropertyChange
的一些信息:https://api.emberjs.com/ember/3.20/classes/Component/methods/notifyPropertyChange?anchor=notifyPropertyChange如果我误解了您的问题,请解释和/或更新您的问题。
此答案为Ember 3.20的最新版本