Backbone.js 处理属性的更改';主干模型中的名称

Backbone.js 处理属性的更改';主干模型中的名称,backbone.js,backbone-events,Backbone.js,Backbone Events,假设您有一条主干模型消息,其属性为“read” 其他模型或视图通过以下方式侦听此属性中的更改: this.listenTo(message, "change:read", someFunc) 现在,如果我将属性的名称更改为“isRead”,则必须将该行代码更改为: this.listenTo(message, "change:isRead", someFunc) 我怎样才能避免呢?因为可能有很多地方我都在听变化事件,所以我想避免这种情况 例如,我避免使用 message.get("read"

假设您有一条主干模型消息,其属性为“read”

其他模型或视图通过以下方式侦听此属性中的更改:

this.listenTo(message, "change:read", someFunc)
现在,如果我将属性的名称更改为“isRead”,则必须将该行代码更改为:

this.listenTo(message, "change:isRead", someFunc)
我怎样才能避免呢?因为可能有很多地方我都在听变化事件,所以我想避免这种情况

例如,我避免使用

message.get("read")
我更喜欢创建一个像

message.isRead()
这是在模型中定义的。但我看不到一个很好的选择,在变化事件的情况下这样做

谢谢

编辑:我看到的选项之一是在模型中定义静态对象事件:{readChange:“change:read”},然后我的代码变成:

this.listenTo(message, MessageModel.events.readChange, someFunc)
还有更标准的选择吗


EDIT2:当然,当我说属性名称的改变时,我的意思是在开发过程中。通常从某个属性的名称开始,然后再看看另一个名称会更好。在这种情况下,我不想在属性名称出现的地方修改所有代码

我不确定是否理解您的问题,但如果您试图以编程方式执行此操作,请不要这样做

主干网中没有这样的机制,如果您被迫这样做,那么您的应用程序中可能存在概念上的错误,即,您的问题在别处

您应该将读取状态存储为变量:

this.message.set({read: true});

现在,如果您想在代码中(而不是在运行时)更改该名称,那么在应用程序中的某个位置附加声明的变量可以解决您的问题:

this.listenTo(message, "change:" + App.config.readProperty, someFunc);

我不确定我是否理解您的问题,但如果您试图以编程方式执行此操作,请不要这样做

主干网中没有这样的机制,如果您被迫这样做,那么您的应用程序中可能存在概念上的错误,即,您的问题在别处

您应该将读取状态存储为变量:

this.message.set({read: true});

现在,如果您想在代码中(而不是在运行时)更改该名称,那么在应用程序中的某个位置附加声明的变量可以解决您的问题:

this.listenTo(message, "change:" + App.config.readProperty, someFunc);

我同意答案-听起来你的应用程序在概念上有问题-需要侦听在应用程序生命周期中发生变化的变量的原因是什么?我同意答案-听起来你的应用程序在概念上有问题-需要侦听在应用程序生命周期中发生变化的变量的原因是什么应用生命周期中的更改?谢谢您的回答。当然,我的意思是:在开发过程中更改属性的名称。正如您在readProperty works中提到的。我想知道在这方面是否有最佳实践。例如,最好使用getter而不是使用get(“attributeName”)。我认为在列出属性更改事件时也会有一个最佳实践。我认为最简单易读的解决方案是通过某种配置分配标识符。如果你认为这是一个令人满意的答案,考虑接受它。实际上,我不希望我的属性的名字出现在模型之外。因此,我更喜欢这个.listenTo(message,MessageModel.events.readChange,someFunc),这是我的第一个见解,因为属性的名称只会出现在MessageModel中。这样,我知道如果我更改了属性的名称,这是唯一受影响的地方。好的,为了可读性,您应该正确地命名这些配置选项。谢谢您的回答。当然,我的意思是:在开发过程中更改属性的名称。正如您在readProperty works中提到的。我想知道在这方面是否有最佳实践。例如,最好使用getter而不是使用get(“attributeName”)。我认为在列出属性更改事件时也会有一个最佳实践。我认为最简单易读的解决方案是通过某种配置分配标识符。如果你认为这是一个令人满意的答案,考虑接受它。实际上,我不希望我的属性的名字出现在模型之外。因此,我更喜欢这个.listenTo(message,MessageModel.events.readChange,someFunc),这是我的第一个见解,因为属性的名称只会出现在MessageModel中。这样,我知道如果我更改属性的名称,那是唯一受影响的地方。好的,为了可读性,您应该正确地命名这些配置选项的名称空间。