backbone.js中的@set为一个属性而不是另一个属性工作

时间:2012-04-16 18:33:44

标签: ajax ruby-on-rails-3 backbone.js

TL;更新的DR:缺少attr_accessible。

我刚开始使用backbone.js,我正在尝试将Ryan Bates的raffler扩展为待办事项列表。

现在,我正试图在项目“完成”时将其保存。为了确保它在代码的工作分支中,我将@set置于我知道正在工作的@set中。

win: ->
    @set(winner: true)
    @set(completed: true)
    @save()

'completed'属性显示为true,但在重置页面时返回false。 “胜利者”属性保持不变。

这是我的视图代码(.jst.echo格式):

<span class="entry">
<% if @entry.get('completed'): %>
  <input class='is-done' type='checkbox'  checked />
<% else: %>
  <input class='is-done' type='checkbox'  />
<% end %>
<%= @entry.get('name') %>
<%= @entry.score() %>

<% if @entry.get('winner'): %>
  <span class="winner">WINNER</span>
<% end %>
</span>

这是我的rails数据库架构:

create_table "entries", :force => true do |t|
  t.string   "name"
  t.boolean  "winner"
  t.datetime "created_at",                    :null => false
  t.datetime "updated_at",                    :null => false
  t.boolean  "completed",  :default => false
end

感谢您的帮助!

更新:已解决

问题在于我没有将'completed'设置为attr_accessible。请注意以下Put语句中,当'completed'返回true时,只有'name'和'winner'位于'entries'哈希中。

Started PUT "/api/entries/2" for 127.0.0.1
Processing by EntriesController#update as JSON
  Parameters: {"entry"=>{"name"=>"There", "winner"=>true}, "completed"=>true, "created_at"=>"2012-04-16T18:04:41Z", "id"=>"2", "name"=>"There", "updated_at"=>"2012-04-16T18:13:04Z", "winner"=>true}

将'completed'设置为attr_accessible后,它提供以下内容:

Started PUT "/api/entries/2" for 127.0.0.1
Processing by EntriesController#update as JSON
  Parameters: {"entry"=>{"name"=>"There", "winner"=>true, **"complete"=>true**}, "completed"=>true, "created_at"=>"2012-04-16T18:04:41Z", "id"=>"2", "name"=>"There", "updated_at"=>"2012-04-16T18:13:04Z", "winner"=>true}

更重要的是,它有效。

0 个答案:

没有答案