首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Backbone.js和Rails -如何处理主干模型中的参数?

Backbone.js和Rails -如何处理主干模型中的参数?
EN

Stack Overflow用户
提问于 2011-06-08 05:55:54
回答 6查看 9.1K关注 0票数 23

在标准的Rails控制器中,我会像这样创建一条记录:

代码语言:javascript
复制
@user = User.new(params[:user])

这假设传入的表单参数是嵌套的。

我一直在使用Backbone.js,我注意到在默认情况下,Backbone不会像普通的Rails表单那样嵌套参数,这实际上是我所期望的。所以我想知道我该怎么做...

我有吗?

在服务器端,通过查看accepts头等来判断它是否是来自Backbone的请求,并自己操作参数,这样我就可以保持我的控制器代码很小:

代码语言:javascript
复制
do_some_params_manipulation_with(params)
@user = User.new(params[:user])
respond_to do |format|
  if @user.save
    format.html {redirect_to users_url}
    format.json {render :json => @user.to_json }
  end
end

或者,我是否实例化每个分支中的对象,这些分支最终会有重复的代码,但从长远来看可能更易于维护……

代码语言:javascript
复制
respond_to do |format|
  format.html do
    @user = User.new(params[:user])
    if @user.save
      redirect_to users_url
    end
  end

  format.json do
    @user = User.new(params) # and rely on mass-assignment protection
    if @user.save
      render :json => @user.to_json
    end
  end

end

或者,我是否可以通过重写.toJSON方法来修改我的Backbone.js模型(我不完全确定该怎么做,因为我还不太了解Backbone.js ),这样它就可以嵌套参数了?

在这种情况下,我可以访问应用程序的两端,但我对其他人正在做的事情感兴趣。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-06-08 06:30:01

当您可以让常规Rails表单和主干表单与根节点相匹配时,这是很好的。这就是为什么在我的上一个应用程序中,我选择覆盖骨干模型的toJSON方法。

您可以覆盖全局toJSON方法as Raimonds Simanovskis suggested。但即使是非干式方法也不是那么糟糕。每个模型定义只有一行样板:

代码语言:javascript
复制
// Depends on Underscore.js
User = Backbone.Model.extend({
  toJSON: function() {
    return { user: _.clone( this.attributes ) }
  },
  // Your other methods here
});

编辑:更正后的代码示例。很抱歉出现这些错误,我正在从CoffeeScript翻译到JavaScript。

票数 36
EN

Stack Overflow用户

发布于 2012-07-02 19:52:54

如果您使用的是backbone-rails gem,看起来您可以

代码语言:javascript
复制
var User = Backbone.Model.extend({
   paramRoot: 'user'
});

github上的第45行附近

link上的信用PL J和stream 7

票数 9
EN

Stack Overflow用户

发布于 2011-08-06 01:22:30

我对model.name属性下的名称空间保存请求做了一些修改。It猴子仅在sync()调用期间修补toJSON(),并恢复原始方法,以便您可以照常使用它。

我已经在CoffeeScript中实现了它。

Check it here

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6272070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档