Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何判断Backbone.js中的模型是否未更改?_Javascript_Backbone.js_Underscore.js - Fatal编程技术网

Javascript 如何判断Backbone.js中的模型是否未更改?

Javascript 如何判断Backbone.js中的模型是否未更改?,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,这可能是由于对组件的误用,尽管我不这么认为。 我遇到一个问题,视图在主干JS中更新模型,并调用模型的Set方法,以便验证其输入。 理论上,这种行为有两种结果:错误和变化。 这两项活动都按规定进行。 但事实上还有第三件事:没有变化。 也就是说,如果输入根本没有被更改,我无法在调用Set后判断,因为不会抛出错误,也不会抛出更改事件,因为实际上没有任何更改-但我仍然想知道这种情况。 我有办法做到这一点吗 原因是,只有在没有错误发生的情况下,我才希望执行一个操作,但我无法知道(如果没有更改事件),模型已

这可能是由于对组件的误用,尽管我不这么认为。 我遇到一个问题,视图在主干JS中更新模型,并调用模型的Set方法,以便验证其输入。 理论上,这种行为有两种结果:错误和变化。 这两项活动都按规定进行。 但事实上还有第三件事:没有变化。 也就是说,如果输入根本没有被更改,我无法在调用Set后判断,因为不会抛出错误,也不会抛出更改事件,因为实际上没有任何更改-但我仍然想知道这种情况。 我有办法做到这一点吗

原因是,只有在没有错误发生的情况下,我才希望执行一个操作,但我无法知道(如果没有更改事件),模型已尝试设置新值,但由于所有操作都是异步进行的,因此没有结果


谢谢

每个主干模型都有一个:

已更改
模型。已更改([属性])

自上次“更改”事件以来,模型是否已更改?如果传递了属性,如果该特定属性已更改,则返回
true

也许你可以用它来检查你的第三种可能性

顺便说一句,回调不是异步的。错误和更改的回调将在以下时间之前触发并返回:


\u performValidation
调用会触发错误回调,而
this.trigger
调用会调用每个属性回调。

在这种情况下,您可能需要在
Model.set()
周围跳一点才能到达您想要的位置。如果您正在使用此功能,那么您应该在模型上定义一个
validate()
方法

所以你可以直接调用这个方法

// something happens and we need to update the model to "newvalues"
if (model.validate(newvalues)) {
  model.trigger('error')
} else {
  model.trigger('change')
}
model.set(newvalues)

这样你至少会从中得到“改变”或“错误”,即使是相同的。您仍然可以从set获取现有事件。

谢谢!我觉得它是异步的。我将尝试使用hasChanged…@Che:任何命中服务器(
sync
save
,…)的操作都将是异步的,任何仅在浏览器中发生的操作都将是同步和顺序的。请查看上面发布的代码。hasChanged()查找
此项。如果未将模型设置为新值,则不会触及已更改的
。所以这不起作用。@maxl0rd:这是OP感兴趣的第三种状态,所以你没有任何意义。@muistooshort抱歉,我不清楚。我想说明的是_changed,或hasChanged()仅在更改事件的事件处理程序中的短暂提示中有用。因为这些不会在所有情况下都被触发,所以没有建设性的时间在他的用例中检查该属性。
// something happens and we need to update the model to "newvalues"
if (model.validate(newvalues)) {
  model.trigger('error')
} else {
  model.trigger('change')
}
model.set(newvalues)