Backbone.js 当值不为';不变

Backbone.js 当值不为';不变,backbone.js,Backbone.js,backbone.js的一个已知特性是,当您设置未更改的数据时,它不会触发更改事件,也不会进行验证。但是,当我存储来自存储后端验证结果的AJAX调用的JSON响应时,我需要触发更改事件。如果用户继续提交表单,同时将同一字段留空,那么后端验证将返回相同的JSON结果,并且当我将其保存到模型时,不会触发更改事件 我在AJAX成功回调中尝试了几件事,其中我将数据设置到模型中: 尝试的解决方案#1 尝试解决方案#2 这两种情况都不会导致在发出调用且用户具有相同的JSONResponse时再次触发更改事件

backbone.js的一个已知特性是,当您设置未更改的数据时,它不会触发更改事件,也不会进行验证。但是,当我存储来自存储后端验证结果的AJAX调用的JSON响应时,我需要触发更改事件。如果用户继续提交表单,同时将同一字段留空,那么后端验证将返回相同的JSON结果,并且当我将其保存到模型时,不会触发更改事件

我在AJAX成功回调中尝试了几件事,其中我将数据设置到模型中:

尝试的解决方案#1 尝试解决方案#2
这两种情况都不会导致在发出调用且用户具有相同的JSONResponse时再次触发更改事件。

手动触发更改事件:

t.model.trigger('change', t.model);

请看下面的对话:


如果您不害怕样板,请参阅ScottPuleo的答案。否则,您可以重写
Model#set
方法,以始终触发自定义事件(如果您感兴趣,我将给出如何触发的答案)。第二种情况(随机选项)可能永远不会使用。这里只需要
trigger
方法。请记住传递必要的参数,因为当您手动触发时,主干不会为您提供这些参数。注意:“第二种情况”指的是一个已被删除的旧情况。@Scott Puleo这是一个旧问题,但我想知道您是否可以解释为什么我们需要将模型本身作为第二个参数传递给
trigger
?如果我不这样做,
Collection.\u onModelEvent
(稍后调用)不会接收模型。在我看来,
model.trigger('change')
应该足以将模型转发到后面的事件。你知道为什么不是吗?(对不起,如果我的问题不清楚的话…)哦,好吧,在提问之前应该再搜索一下。看起来像个bug:
t.model.set({fieldErrors: null},{silent: true});
t.model.set({fieldErrors: JSONResponse});
t.model.trigger('change', t.model);
t.model.trigger('change:fieldErrors', t.model, newFieldErrorsValue);
this.model.set({fieldErrors: JSONResponse}, {silent:true});
this.model.trigger('change:fieldErrors');