主干:模型保存上的两个更改事件
Backbone: Two Change Events on Model Save
当我尝试通过save
在Backbone中更新模型时,模型上的更改事件被触发两次。事件按此顺序触发。
- 请求
然而,如果我通过(wait: true)
,只有第一个change
事件被触发。
有谁能解释一下为什么会发生这种情况,以及我如何才能让change
只发射一次而不通过(wait: true)
?
两个变化事件:
editItem: function() {
this.model.save({
name: "Howard the Duck"
});
}
一个更改事件:
editItem: function() {
this.model.save({
name: "Howard the Duck"
}, (wait: true);
}
伪代码:
App.Views.Item = Backbone.View.extend({
initialize: function() {
this.model.on("change", this.changing, this);
this.model.on("request", this.requesting, this);
this.model.on("sync", this.syncing, this);
},
events: {
"click a": "editItem"
},
editItem: function() {
this.model.save({
name: "Howard the Duck"
});
}
changing: function() {
console.log("changing");
},
requesting: function() {
console.log("requesting");
},
syncing: function() {
console.log("syncing");
}
});
下面是在更改属性时保存模型的分解:
-
model.set
,数据作为参数传递
当options.wait
为false时触发change事件 XHR请求 -
model.set
与从服务器返回的数据
当options.wait
为真或服务器返回的数据不是模型所知道的 时,触发change事件
您的服务器可能返回一个修改后的属性,从而触发第二个change事件。要么修改响应,要么用
限制事件监听this.model.on("change:name", this.changing, this);
比较这些提琴
http://jsfiddle.net/nikoshr/ZWFWx/
响应是客户端发送的
您应该看到请求改变—— - 同步http://jsfiddle.net/nikoshr/QT3YJ/
模拟您的问题的版本,其中服务器添加了模型中不存在的值
请求改变—— - 同步改变——
相关文章:
- 如何在jQuery中获取两个事件之间的时间差
- 从一个套接字发出两个事件
- 如何将两个事件的变量组合为一,作为两者的总和.jquery
- ajax,用两个事件启动函数
- 在两个事件侦听器之间交替的更有效方法
- 单用户操作触发两个事件-第二个事件不触发't触发器
- 一个 PHP 文件中有两个事件功能
- 获取一个按钮来触发两个事件
- 比较全日历中的两个事件
- 在一个按钮上切换两个事件
- 如何在fullcalendar.js上拖放两个事件
- 鼠标悬停时发生两个事件
- 听mouseover和mouseout<李>仅限活动?<李>当前触发这两个事件
- 两个事件激发相同的功能
- 无法在主干视图中定义两个事件
- jQuery-两个事件在Twitter启动后启动's模式关闭
- 两个事件处理程序和一个函数.如何防止代码执行两次
- 我可以让一个javascript函数监听两个事件吗?MVC
- 单个元素[Jquery]中的两个事件
- javascript onclick组合两个事件在ios(iPhone、iPad)上不起作用