3

我迟到骨干派对的原因是因为我担心它不会与我现有的网络服务很好地配合。我什至已经到了使用我自己版本的主干控制器和模型的地步,但是仅仅编写我自己的(当然)更糟糕的实现是徒劳的。

我正在使用 Asp.net Web 服务,因此,假设我们正在更新用户模型,我使用以下三个调用:

myservice/deleteUser.aspx?id=1
myService/getUser.aspx?id=1
myService/setUser.aspx? //post model

我不明白这如何与骨干一起使用sync?我想我必须覆盖fetch/savedestroy?

我真的很感激一些很好的例子。我已经阅读了这个主题,包括带注释的来源,但我正在为“啊哈”的时刻而奋斗。

4

1 回答 1

13

您可以为您的集合或模型提供自定义sync函数,而不是Backbone.sync在您获取/更新/销毁元素时调用该函数。然后,您可以定制选项以发出与您的服务器设置匹配的请求。例如,

var M = Backbone.Model.extend({

    sync: function(method, model, options) {
        options || (options = {});

       // passing options.url will override 
       // the default construction of the url in Backbone.sync

        switch (method) {
            case "read":
                options.url = "/myservice/getUser.aspx?id="+model.get("id");
                break;
            case "delete":
                options.url = "/myservice/deleteUser.aspx?id="+model.get("id");
                break;
            case "update":
                options.url = "/myService/setUser.aspx";
                break;
        }

        if (options.url)
            return Backbone.sync(method, model, options);
    }

});

var c = new M({id: 1});
c.fetch();
c.save();
c.destroy();

还有一个模拟这些调用的小提琴http://jsfiddle.net/nikoshr/4ArmM/

如果使用 PUT 和 DELETE 作为 HTTP 动词让您感到困扰,您可以通过添加Backbone.emulateHTTP = true; See http://jsfiddle.net/nikoshr/4ArmM/1/来强制发布一个修订版。

于 2012-11-06T16:21:17.380 回答