gpt4 book ai didi

javascript - 如果多个模型属性同时更改,是否可以只收到一次通知?

转载 作者:行者123 更新时间:2023-11-29 19:29:27 24 4
gpt4 key购买 nike

我想要一个 Marionette ItemView(或 LayoutView),它会在模型​​更改时重新呈现。它实际上很容易实现:

modelEvents: {
'change': 'render'
}

但是,并非每个 View 都显示模型的每个属性。所以我有了一个想法,通过只监听那些改变了一些属性的事件来减少重新渲染的次数。如果 View 只需要一个属性,情况也很简单:

modelEvents: {
'change:attribute': 'render'
}

但是,如果需要监听几个属性的变化,就比较复杂了。两者都是

modelEvents: {
'change:attribute1': 'render',
'change:attribute2': 'render'
}

modelEvents: {
'change:attribute1 change:attribute2': 'render'
}

如果 attribute1 和 attribute2 在一个事件中都被更改,将重新渲染 View 两次。有什么简单的语法可以在这种情况下只通知一次吗?我知道,我可以做到这一点:

modelEvents: {
'change': 'checkIfRenderNeeded'
},
checkIfRenderNeeded: function(event) {
if (('attribute1' in event.changed) || ('attribute2' in event.changed)) {
this.render();
}
}

但是有没有更优雅的解决方案呢?也许一些特殊的语法可以将此行为包含在 modelEvents 属性中,而无需在通用更改事件监听器上编写更改检查器?

最佳答案

与 Paul Rowe 相同的解决方案,但在 Marionette 的上下文中:

你可以使用Underscore的_.debounce包装你的 render 函数的函数:

var lazyRender = _.debounce(render, 50)

modelEvents: {
'change:attribute1 change:attribute2': 'lazyRender'
}

然后,如果 attribute1attribute2 在 50 毫秒的时间跨度内发生多次变化,lazyRender 将被调用多次,但render 函数只会被调用一次。

关于javascript - 如果多个模型属性同时更改,是否可以只收到一次通知?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28857151/

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