2011-11-16 149 views
1

基于表单中输入的数据,从RESTful Web服务检索数据的主干协议/最佳实践是什么?通过AJAX请求提交表单

从我明白我可以注册在视图点击观察者,所以当表单提交按钮被点击的视图将检索表单中的数据。但我不清楚我是否执行从视图,模型路由器的AJAX呼叫。

从本质上讲,我不清楚哪个下面是约定:

  1. 视图获取参数,执行AJAX调用,然后将返回的JSON到模式
  2. 视图获取参数,并将其传递给模式,并将它从Web服务执行AJAX调用和检索数据
  3. 查看获取参数并将它们传递给路由器并让它执行AJAX调用并相应地填充相应的模型和视图?

注:我需要提交搜索条件,以一个RESTful Web服务,它预计的数据进行公布;纠正我,如果我错了,但它似乎并不像我可以使用:fetchsave。我应该在使用$ .ajax({...})发布参数并接收JSON数据的模型中创建一个函数吗?

回答

9

backbone.js模型已经设置为执行RESTful请求。方法2是你想要做的。

,你必须在模型中设置的唯一的事情是一个URL:

MyModel = Backbone.Model.extend({ 
    url: 'http://path/to/my/RESTful/service' 
}); 

MyView = Backbone.View.extend({ 
    events: { 
     'submit #myform': 'saveToModel' 
    }, 

    initialize: function() { 
     // ... 
    }, 

    saveToModel: function() { 
     // this triggers a RESTFul POST (or PUT) request to the URL specified in the model 
     this.model.save({ 
      'foo': 'Foo!', 
      'bar': 'Bar!' 
     }); 
    } 


}); 
+0

'fetch'和'save'似乎不是可行的选项(见原文)。我应该创建一个处理请求的新函数吗? – Dan

+1

Backbone对于RESTful服务非常明智。 'save()'对于这个用例来说工作得很好。该模型知道它应该在新资源时使用“POST”请求。也就是说,如果模型上没有设置“id”元素。如果有'id'元素集,模型将使用'PUT'请求。另一方面,'fetch'将使用'GET'请求。 – poezn

+0

我对Backbone有点新,但不应该将POST数据发送到处理它的控制器/路由?我认为这更符合MVC原则......但是如果你想对一条路线进行POST,那么Backbone的工作方式如何?例如,在sammy.js中,这非常简单 – Maarten

0

绑定提交事件的形式ID或DIV ID,而不是按钮的ID。