为Backbone.js模型生成飞行URL

时间:2012-02-19 12:01:04

标签: asp.net-mvc backbone.js underscore.js webmethod

我确实有这样的解决方案(而不是称之为黑客攻击)来做这个,但寻找优雅的问题解决方案。这是问题,请慢慢来看看

我在WebMethods页面中获得了index.aspx,其中发送了ajax(createupdatedelete)请求。 单个web方法无法处理所有这些操作,因此对于Person模型,有3种方法,即

  1. CreatePerson (attributes)
  2. UpdatePerson (attributes)
  3. DeletePerson(personId)
  4. 因此我使用如下的hacky进程,javascript函数名称对应于服务器上的相应方法

    CreatePerson:function(){
    
    model.url = "/CreatePerson";
    
    },
    UpdatePerson:function(){
    
    model.url = "/UpdatePerson";
    
    },
    DeletePerson:function(){
    
    model.url = "/DeletePerson";
    
    }
    

    上述方法在呈现Person模型的视图上声明。模型的urlRoot是index.aspx因此当操作创建时,ajax调用将被路由到index.aspx中的 CreatePerson方法 index.aspx / CreatePerson

    如果我委托同步功能,它将覆盖js应用程序中的所有模型,我不想发生这种情况。

    问题

    在使用带有asp.net页面的Backbone.js时,有没有我可以根据模型端点准备url之前的ajax请求?

1 个答案:

答案 0 :(得分:4)

如果您有一个模型,或者如果您正在处理单个模型,则应该覆盖集合的sync方法。然后根据它是否创建,更新或销毁相应地更改URL并调用Backbone同步进一步传递所有参数,同时设置正确的URL。

var Model = Backbone.Model.extend({

    ...

    sync: function(method, model, options) {

      // here method param can be either "read", "create", "update", "destroy"
      // set your url based on its value

      Backbone.sync.call(this, method, this, options); 
      // if your super class had custom sync as well you'd have to call 
      // Model.__super__.sync.call(...)
    }

});

我不是ASP程序员,但是不可能使用.NET的REST接口吗?让事情变得更容易:)