草庐IT

javascript - 在哪里编码以覆盖 backbone.sync

coder 2024-07-21 原文

我想覆盖 backbone.sync 我已经问过这个但问题是我不太明白。如果我要覆盖同步功能,我需要知道将代码放在哪里。

如果我像这样把它放在模型上

model = Backbone.Model.extend({ sync:"" });

那我该怎么称呼呢?如果我要使用保存方法。我还需要将创建的 methodMap 从 POST 更改为 PUT。暂时我求助于此 'create': 'PUT', 实际编辑 backbone.js 文件(我知道它不好)。在我忘记之前我还需要添加这个

sendAuthentication = function (xhr) {
          xhr.setRequestHeader('Authorization', auth)
}; 

作为 beforeSend 参数,因为我的服务器有身份验证。我应该在哪里做呢?我应该把代码放在哪里?在我的模型中?在我的收藏中?或者在我看来?有什么帮助吗?谢谢。

更新

我还可以覆盖我收藏的同步吗?我的意思是我可以要这样的东西吗?

collection = Backbone.Collection.extend({ sync:""});

最佳答案

Backbone 框架背后的策略是使其易于编辑并灵活地满足各种需求。因此,如果您查找源代码,您会发现每个调用 Backbone.sync 的方法实际上首先调用“this.sync”。

您可以从 Backbone 手册中阅读:

The sync function may be overriden globally as Backbone.sync, or at a finer-grained level, by adding a sync function to a Backbone collection or to an individual model.

所以你有两个选择

选项一——替换全局 Backbone.sync 函数

如果您覆盖全局 Backbone.sync,您应该将您的代码放在您的全局应用程序文件中(实际上是您想要的任何位置,但必须在您的初始 javascript 加载时对其进行评估(执行),以按预期工作

// Anywhere you want

Backbone.sync = function(method, collection, options) {
        console.log(method, collection options)
}

这将覆盖 Backbone.sync 并且实际上将在您的控制台上显示每次调用 collection.fetch、保存、删除等时调用的内容。

这里你没有默认的 Methodmap,事实上除了参数你什么都没有:

  • 方法 - 这是一个字符串 - 'read'、'create'、'delete'、'update'
  • collection - 这是调用方法的集合实例
  • 选项 - 有一些成功、错误函数,您可以保留也可以不保留。

在浏览器中调试,同时阅读 Backbone 源代码,非常容易理解。

选项二 - 添加到您的模型/集契约(Contract)步方法

如果您希望对每个其他模型/集合使用默认的 Backbone.sync 方法,则使用此方法,除了您专门定义的那个:

mySocketModel = Backbone.Model.extend({ 
     sync : function(method, collection, options) {
            console.log('socket collection '+this.name+' sync called');
     }
});

Partners = new mySocketModel({ name : 'partners' });
Users = new mySocketModel({ name : 'users' });
Log = new Backbone.Collection;

因此,如果您调用 Partners.fetch() 或 Users.fetch(),它们将不再调用 Backbone.sync,但您的 Log.fetch() 方法会。

关于javascript - 在哪里编码以覆盖 backbone.sync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10083550/

有关javascript - 在哪里编码以覆盖 backbone.sync的更多相关文章

  1. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  2. ruby - 用逗号、双引号和编码解析 csv - 2

    我正在使用ruby​​1.9解析以下带有MacRoman字符的csv文件#encoding:ISO-8859-1#csv_parse.csvName,main-dialogue"Marceu","Giveittohimóhe,hiswife."我做了以下解析。require'csv'input_string=File.read("../csv_parse.rb").force_encoding("ISO-8859-1").encode("UTF-8")#=>"Name,main-dialogue\r\n\"Marceu\",\"Giveittohim\x97he,hiswife.\"\

  3. ruby-on-rails - 在混合/模块中覆盖模型的属性访问器 - 2

    我有一个包含模块的模型。我想在模块中覆盖模型的访问器方法。例如:classBlah这显然行不通。有什么想法可以实现吗? 最佳答案 您的代码看起来是正确的。我们正在毫无困难地使用这个确切的模式。如果我没记错的话,Rails使用#method_missing作为属性setter,因此您的模块将优先,阻止ActiveRecord的setter。如果您正在使用ActiveSupport::Concern(参见thisblogpost),那么您的实例方法需要进入一个特殊的模块:classBlah

  4. ruby - 无法覆盖 irb 中的 to_s - 2

    我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)

  5. ruby - 覆盖相似的方法,更短的语法 - 2

    在Ruby类中,我重写了三个方法,并且在每个方法中,我基本上做同样的事情:classExampleClassdefconfirmation_required?is_allowed&&superenddefpostpone_email_change?is_allowed&&superenddefreconfirmation_required?is_allowed&&superendend有更简洁的语法吗?如何缩短代码? 最佳答案 如何使用别名?classExampleClassdefconfirmation_required?is_a

  6. ruby - 是否可以覆盖 gemfile 进行本地开发? - 2

    我们的git存储库中目前有一个Gemfile。但是,有一个gem我只在我的环境中本地使用(我的团队不使用它)。为了使用它,我必须将它添加到我们的Gemfile中,但每次我checkout到我们的master/dev主分支时,由于与跟踪的gemfile冲突,我必须删除它。我想要的是类似Gemfile.local的东西,它将继承从Gemfile导入的gems,但也允许在那里导入新的gems以供使用只有我的机器。此文件将在.gitignore中被忽略。这可能吗? 最佳答案 设置BUNDLE_GEMFILE环境变量:BUNDLE_GEMFI

  7. C# 到 Ruby sha1 base64 编码 - 2

    我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha

  8. ruby-on-rails - 有没有一种工具可以在编码时自动保存对文件的增量更改? - 2

    我最喜欢的Google文档功能之一是它会在我工作时不断自动保存我的文档版本。这意味着即使我在进行关键更改之前忘记在某个点进行保存,也很有可能会自动创建一个保存点。至少,我可以将文档恢复到错误更改之前的状态,并从该点继续工作。对于在MacOS(或UNIX)上运行的Ruby编码器,是否有具有等效功能的工具?例如,一个工具会每隔几分钟自动将Gitcheckin我的本地存储库以获取我正在处理的文件。也许我有点偏执,但这点小保险可以让我在日常工作中安心。 最佳答案 虚拟机有些人可能讨厌我对此的回应,但我在编码时经常使用VIM,它具有自动保存功

  9. Ruby - 如何处理子类意外覆盖父类(super class)私有(private)字段的问题? - 2

    假设您编写了一个类Sup,我决定将其扩展为SubSup。我不仅需要了解你发布的接口(interface),还需要了解你的私有(private)字段。见证这次失败:classSupdefinitialize@privateField="fromsup"enddefgetXreturn@privateFieldendendclassSub问题是,解决这个问题的正确方法是什么?看起来子类应该能够使用它想要的任何字段而不会弄乱父类(superclass)。编辑:equivalentexampleinJava返回"fromSup",这也是它应该产生的答案。 最佳答案

  10. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

随机推荐