gpt4 book ai didi

ruby-on-rails - 像 Backbone.sync.rails 这样的 BackboneJS 同步助手的目的是什么?

转载 作者:行者123 更新时间:2023-12-04 05:37:24 28 4
gpt4 key购买 nike

我正在试验 Rails-BackboneJS 堆栈,我在一些演示项目中看到了 Backbone.sync.rails 的使用,例如这种风格:https://github.com/codebrew/backbone-rails/blob/master/vendor/assets/javascripts/backbone_rails_sync.js

据我所知,这会覆盖主干模型和集合的同步功能。然而,就我而言,我得到了一些奇怪的效果(模型中的意外嵌套、空集合)。

所以,我问自己,Rails 同步助手的目的是什么?在(不)使用这些助手时需要考虑什么?

谢谢!

最佳答案

Sync 本质上是 Backbone 的通用 Hook ,用于所有较低级别的数据处理自定义。他们在同步文档中说了很多:

Backbone.sync is the function that Backbone calls every time it attempts to read or save a model to the server. By default, it uses jQuery.ajax to make a RESTful JSON request and returns a jqXHR. You can override it in order to use a different persistence strategy, such as WebSockets, XML transport, or Local Storage.

对于 Rails 同步助手,作者甚至没有改变同步的基本性质(例如,更改为本地存储)。相反,他的同步仍然“使用 jQuery.ajax 发出 JSON 请求并返回 jqXHR”,但它:

  1. 将 CSRF token 添加到请求中
  2. 添加一个可选的“paramRoot”属性,您可以使用该属性指定应将模型的数据添加到请求中

你可以在这里看到#1:

beforeSend: function( xhr ) {
if (!options.noCSRF) {
var token = $('meta[name="csrf-token"]').attr('content');
if (token) xhr.setRequestHeader('X-CSRF-Token', token);
}
model.trigger('sync:start');
}

和#2 在这里:

if(model.paramRoot) {
data[model.paramRoot] = model.toJSON();
} else {
data = model.toJSON();
}

我不知道你为什么会这样

strange effects (unexpected nesting in models, empty collections)

但我个人建议只编写您自己的 Backbone.sync。如您所见,实现它的功能并不多,通过制作您自己的自定义功能,您从本质上理解它是如何工作的(这很好,因为它对您的应用非常关键)。

或者,您可以完全避免整个 Backbone.sync 覆盖方法。相反,您可以使用其他机制,例如 jQuery .ajaxSend() 来处理 #1 或您自己的自定义 Model.toJSON 覆盖 #2。

关于ruby-on-rails - 像 Backbone.sync.rails 这样的 BackboneJS 同步助手的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16131901/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com