如何将自定义框架集成到骨干网中?

时间:2014-07-22 12:14:45

标签: javascript backbone.js mv

我使用PHP和此对象文字形式访问我的服务器。此对象文字转换为JSON并发送到服务器,然后将其转换回对象。从那里我读取了model属性以了解要运行的模型。此外,包含的是用户令牌,因此我知道要为哪个用户检索模型数据。

$A.Packet.define({
    model:   null,
    client:  {},
    server:  {
        smalls:   {},
        feed:   {},
        favorites: {}
    }
});

基本上,策略是将信息编码为对象文字,json对其进行编码,发送,解码,应用服务器逻辑并以JSON格式发回数据。

这一切都被抽象为正在运行的

$A.Packet.push({model: self.Name});

然后pre(packet)post(packet) ajax方法自动运行。

如何将这种风格整合到主干中?

根据Backbone的说法,我可以覆盖sync()函数,但我想在黑客入侵之前最好地理解如何整合东西。

我的代码已经转换为MV *格式,但我正在使用虚拟数据来测试前端。我现在想把后端带上去。

开发网站在这里:

http://www.arcmarks.com/dev

相关

How to override Backbone.sync? - 但是我还不想使用localStorage,我对它必须实现的4种方法没有用处。

我的所有操作都是POST JSON调用,这些调用在他们到达服务器后就会执行所需的操作。

1 个答案:

答案 0 :(得分:1)

在带注释的Backbone.LocalStorage来源中,有一个名为Backbone.LocalStorage.sync的文档末尾的静态方法别名为Backbone.localSync。这是他们编写实现自定义同步的代码的实际部分。

  • 然后他们将Backbone.sync引用到Backbone.ajaxSync
  • 下一步实现策略模式以决定使用哪种同步方法。
  • 最后,他们使用自定义函数覆盖Backbone.sync以使用策略。

这允许开发人员通过向模型根对象添加属性来选择哪种同步类型,在本例中为localStorage : new Backbone.LocalStorage()。您只需要根据自己的需要实现它。

// Create your own sync method
Backbone.customSync = function(method, model, options, error) {
    // Your custom sync code here
    return $.post('http://something.somewh.ere', model.toJSON());

    // Implementing a switch statement for the method in here would
    // be a good idea :-)
}

// Create reference to original sync method
Backbone.ajaxSync = Backbone.sync;

// Get the sync strategy
Backbone.getSyncMethod = function(model) {
    if(model.customSync || (model.collection && model.collection.customSync))
        return Backbone.customSync;

    return Backbone.ajaxSync;
};

// Overwrite Backbone.sync to call getSyncMethod() to run sync tasks
Backbone.sync = function(method, model, options, error) {
    return Backbone.getSyncMethod(model)
                   .apply(this, [method, model, options, error]);
};

现在,如果您的模型的属性customSync是真值,则会使用新的同步策略。

这一切都可以根据您的需求进行调整,希望这会有所帮助。