当值没有改变时,触发backbone.js会改变

17 backbone.js

backbone.js的一个已知功能是,当您设置未更改的数据时,它不会触发更改事件,也不会通过验证.然而,当我存储来自存储后端验证结果的AJAX调用的JSON响应时,我需要触发更改事件.如果用户一直保持提交表单,同时将相同的字段留空,则后端验证将返回相同的JSON结果,当我将其保存到模型时,它不会触发更改事件.

我在AJAX成功回调中尝试过的一些事情,我将数据设置到模型中:

尝试解决方案#1

t.model.unset('fieldErrors',{silent: true});
t.model.set({fieldErrors: JSONResponse});
Run Code Online (Sandbox Code Playgroud)

尝试解决方案#2

t.model.set({fieldErrors: null},{silent: true});
t.model.set({fieldErrors: JSONResponse});
Run Code Online (Sandbox Code Playgroud)

这些都不会导致更改事件在进行调用时第二次触发并且用户具有相同的JSONResponse.

Sco*_*leo 26

手动触发更改事件:

t.model.trigger('change', t.model);
Run Code Online (Sandbox Code Playgroud)

要么

t.model.trigger('change:fieldErrors', t.model, newFieldErrorsValue);
Run Code Online (Sandbox Code Playgroud)

  • 应该永远不应该使用第二种情况(随机选项).这里只需要`trigger`方法.请记住传递必要的参数,因为当您手动触发时,骨干网不会为您执行此操作. (5认同)
  • 注意:"第二种情况"是指自从被删除以来的旧案例. (2认同)