首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何区分backbone中模型/集合属性的更改和删除?

如何区分backbone中模型/集合属性的更改和删除?
EN

Stack Overflow用户
提问于 2014-08-19 08:57:26
回答 2查看 84关注 0票数 1

我想知道在backbone中是否有专门触发的事件来区分backbone模型或集合中属性值的更改和属性的移除

EN

回答 2

Stack Overflow用户

发布于 2014-08-19 09:09:12

不,在模型属性上调用unset只会触发一个change event。如果你需要有一个不同的事件来挂钩,我建议向模型添加一个方法,包装一个未设置的调用并激发一个自定义事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var MyModel = Backbone.Model.extend({
  removeAttribute: function (attr) {
    this.unset('attr', { silent: true });
    this.trigger('attributeRemoved');
  }
});

var newModel = new MyModel({ first: 'foo', second: 'bar' });
newModel.removeAttribute('first');
票数 1
EN

Stack Overflow用户

发布于 2014-08-19 09:10:05

setunset都将触发'change'事件。来自Backbone文档:

  • Set

在模型上设置属性的散列(一个或多个)。如果任何属性更改了模型的状态,将在模型上触发“更改”事件。还会触发特定属性的更改事件,您也可以绑定到这些属性,例如: change:title和change:content。您还可以将单个键和值传递给

  • Unset

通过从内部属性散列中删除属性来删除该属性。激发"change“事件,除非将silent作为选项传递。

如果你看一看backbone source code,你会看到以下关于unset的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// Remove an attribute from the model, firing `"change"`. `unset` is a noop
// if the attribute doesn't exist.
unset: function(attr, options) {
  return this.set(attr, void 0, _.extend({}, options, {unset: true}));
},

编辑

您可以创建自己的unset函数来替换Backbone.Model中的现有函数,您可以在其中触发任何可能需要的新事件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var FooModel = Backbone.Model.extend({
    unset: function(attr, options) {
        options || (options = {});

        //Call unset in Backbone.Model, set silent option also if suppressChangeEvent was set
        var silent = options.silent;
        options.silent = silent || options.suppressChangeEvent;
        var res = Backbone.Model.prototype.unset.apply(this, arguments);

        //trigger unset events if not silent and the attribute was removed
        if (attr == null || silent || !this.hasChanged(attr)) return res;            
        this.trigger('unset:' + attr, this, this._previousAttributes[attr], options);
        this.trigger('unset', this, options);            
        return res;
    }
});

我已经创建了this fiddle,这样您就可以看到这个想法的实际效果。如果您使用以下代码测试它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var myModel = new FooModel({key1 : 1, key2: "foo", key3: "a"});
myModel.on("change", function(){ console.log("change triggered"); });
myModel.on("change:key1", function(){ console.log("change for key1 triggered"); });
myModel.on("change:key2", function(){ console.log("change for key2 triggered"); });
myModel.on("unset", function(){ console.log("unset triggered"); });
myModel.on("unset:key1", function(){ console.log("unset for key1 triggered"); });
myModel.on("unset:key2", function(){ console.log("unset for key2 triggered"); });

myModel.unset("key1");
myModel.unset("key2", {suppressChangeEvent: true});
myModel.unset("key3", {silent: true});
myModel.unset("key5");

您将在控制台中看到以下输出( key1触发的所有事件,仅为key2触发的未设置事件,如果静默或属性不存在,则为none ):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
change for key1 triggered
change triggered
unset for key1 triggered
unset triggered
unset for key2 triggered
unset triggered
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25379354

复制
相关文章
Kubernetes 1.25 中的重大更改和删除
随着 Kubernetes 的发展和成熟,有些功能可能会被弃用、删除或替换。Kubernetes v1.25 包括几项重大更改和删除。
我的小碗汤
2023/03/19
1.9K0
Kubernetes 1.25 中的重大更改和删除
Kubernetes 1.26 中的删除、弃用和主要更改
变化是 Kubernetes 生命周期不可或缺的一部分:随着 Kubernetes 的成长和成熟,功能可能会被弃用、删除或替换为项目健康的改进。对于 Kubernetes v1.26,有几个计划:本文根据 v1.26 发布过程中这个周期中期点可用的信息确定并描述了其中的一部分,该过程仍在进行中,并且可能会引入其他更改。
我的小碗汤
2023/03/20
1.8K0
Kubernetes 1.26 中的删除、弃用和主要更改
如何从JavaScript对象中删除属性?
在使用 JavaScript 中的对象时,你可能会遇到需要从对象中完全删除属性的情况。为实现这一点可以有好几个选择:
疯狂的技术宅
2021/04/01
12.4K0
如何更改github工程的语言属性
当创建github项目的时候,github本身会根据提交文件的数量来自动推断工程的开发语言,有时这种推断结果会与实际情况不太相符。
Python疯子
2018/09/06
3.4K0
MSBuild 如何编写带条件的属性、集合和任务 Condition?
在项目文件 csproj 中,通过编写带条件的属性(PropertyGroup)、集合(ItemGroup)和任务(Target)可以完成更加复杂的项目文件的功能。
walterlv
2023/10/22
7490
Linux中的Chattr命令更改文件属性
在Linux中,文件属性是描述文件行为的元数据属性。 例如,属性可以指示是否压缩文件或指定是否可以删除文件。
用户5005176
2021/08/10
3.7K0
自动化测试如何区分用例集合
前面的文章介绍过如何设计自动化测试case,有同学在后台问到:业务比较复杂,有很多串行并行甚至组合的业务场景,执行case时经常遇到由于前后依赖导致的case失败问题,该如何处理?当业务复杂度和工作量上来之后,在具体的实践中这是个避不开的问题。那如何解决这个问题?我建议可以通过按照业务和场景区分用例集合的方式来解决。
老_张
2023/03/01
2470
自动化测试如何区分用例集合
【说站】php中require和include如何区分
1、require是无条件的,在过程中添加require,无论是否成立,都会先执行。
很酷的站长
2022/11/24
5500
【说站】php中require和include如何区分
如何删除对象的某个属性(对象属性方法是什么)
const object = { ‘a’: 1, ‘b’: ‘2’, ‘c’: 3 };
全栈程序员站长
2022/07/29
4.5K0
如何在Python中删除(删除)文件和目录
本教程说明了如何使用os,pathlib和shutil模块中的功能删除文件和目录。
用户5005176
2021/08/10
13.1K0
【说站】python中in和is的区分
1、in:一方面可以用于检查序列(list,range,字符串等)中是否存在某个值。也可以用于遍历for循环中的序列。
很酷的站长
2022/11/23
7120
如何:修改C++项目属性和目标,而无需更改项目文
可以从 MSBuild 命令提示符处重写项目属性和目标而无需更改项目文件。 当你想要暂时或偶尔应用某些属性时,这非常有用。 它假定你对 MSBuild 有一定了解。 有关详细信息,请参阅 MSBUild。
用户3519280
2023/07/06
1960
如何正确卸载和更改程序,删除安装包保留驱动?
1、点击[此电脑] 2、点击[卸载或更改程序] 3、点击[Notepad++(64-bit x64)] 4、点击[卸载] 5、点击[卸载] 6、点击[解除安装] 7、点击[关闭]
裴来凡
2022/05/28
1.4K0
如何正确卸载和更改程序,删除安装包保留驱动?
6、backbone中的view实例[fixed 升级到最新版本]
Backbone的view是用来显示你的model中的数据到页面的,同时它也可用来监听DOM上的事件然后做出响应。 先要给出一个页面的大体代码,下面的所有试验代码都要放到这里面:
the5fire
2019/02/28
6420
如何删除 Linux 中的空文件和目录?
在 Linux 系统中,有时我们需要删除空的文件和目录。空文件和目录不包含任何内容,它们可能是我们意外创建的或者是不再需要的。本文将详细介绍如何在 Linux 中删除空文件和目录,同时提供多个实际示例,以便您能够轻松地完成这个任务。
网络技术联盟站
2023/08/03
6030
如何删除 Linux 中的空文件和目录?
ASP.NET Core中如何更改文件上传大小限制maxAllowedContentLength属性值
Web.config中的maxAllowedContentLength这个属性可以用来设置Http的Post类型请求可以提交的最大数据量,超过这个数据量的Http请求ASP.NET Core会拒绝并报错,由于ASP.NET Core的项目文件中取消了Web.config文件,所以我们无法直接在visual studio的解决方案目录中再来设置maxAllowedContentLength的属性值。
跟着阿笨一起玩NET
2021/06/09
4.8K0
ASP.NET Core中如何更改文件上传大小限制maxAllowedContentLength属性值
如何删除 Linux 中的空文件和目录?
在 Linux 系统中,有时我们需要删除空的文件和目录。空文件和目录不包含任何内容,它们可能是我们意外创建的或者是不再需要的。本文将详细介绍如何在 Linux 中删除空文件和目录,同时提供多个实际示例,以便您能够轻松地完成这个任务。
网络技术联盟站
2023/07/14
4430
如何删除 Linux 中的空文件和目录?
3、backbone中的model实例[验证部分更新1.0.0]
关于backbone,最基础的一个东西就是model,这个东西就像是后端开发中的数据库映射那个model一样,也是数据对象的模型,并且应该是和后端的model有相同的属性(仅是需要通过前端来操作的属性)。
the5fire
2019/02/28
7040
Python开发中如何优雅地区分错误和正确的返回结果
Python提供了强大的异常处理机制。通过这种方式,我们可以明确地分离错误和正常返回:
运维开发王义杰
2023/09/19
3020
Python开发中如何优雅地区分错误和正确的返回结果
点击加载更多

相似问题

Backbone -集合中更大的模型属性

11

监听Backbone中嵌套集合中的模型中的特定属性更改

20

Backbone.js从集合中删除模型

12

Backbone js -更改模型属性

10

查找在Backbone集合中没有属性的模型

24
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文