【发布时间】:2014-10-19 09:43:57
【问题描述】:
我正在尝试使用 Backbone 删除表格中的一行。我正在为这个项目使用 Rails 4 和 Backbone-on-rails gem。
我正在使用 addEntryevent 在我的 Movies 表中添加行。这会添加一个包含 id、movie_title 和 user_id 的新行。
索引视图
class Movieseat.Views.MovieseatsIndex extends Backbone.View
template: JST['movieseats/index']
initialize: ->
@collection.on('update', @render, this)
@collection.on('add', @appendEntry, this)
render: ->
$(@el).html(@template())
@collection.each(@appendEntry)
this
events: ->
"click li": "addEntry"
"click .remove": "removeEntry"
addEntry: (e) ->
movie_title = $(e.target).text()
@collection.create title: movie_title
removeEntry: (e) ->
thisid = @$(e.currentTarget).closest('div').data('id')
console.log thisid
@collection.remove thisid
appendEntry: (entry) ->
view = new Movieseat.Views.Entry(model: entry)
$('#entries').append(view.render().el)
当我点击 .remove 元素时,我会得到一个控制台日志结果,显示存储在我要删除的元素中的 id。
条目视图
class Movieseat.Views.Entry extends Backbone.View
template: JST['movieseats/entry']
className: 'movie-frame'
render: ->
$(@el).html(@template(entry: @model))
this
这是我的 index.jst.eco 模板
<h1>Movies</h1>
<div id="entries"></div>
这是我在 index.jst.eco 模板中渲染的 Entry 模板(我正在这样做,所以我只重新渲染添加到视图中的电影电影。
<div class="movie-frame" data-id="<%= @entry.get('id') %>">
<p><%= @entry.get('title') %></p>
<p class="remove">Remove</p>
</div>
还有我的主干路由,
class Movieseat.Routers.Movieseats extends Backbone.Router
routes:
'': 'index'
initialize: ->
@collection = new Movieseat.Collections.Movieseats()
@collection.fetch()
index: ->
view = new Movieseat.Views.MovieseatsIndex(collection: @collection)
$('#container').html(view.render().el)
但是当我点击 .remove 元素时没有网络活动。 addEntry 事件触发时有网络活动。
【问题讨论】:
-
尝试删除缩进,目前 addEntry 和 removeEntry 是事件对象的方法。将它们定义为 View 本身的方法。
-
缩进来自粘贴代码。在我的编辑器中,缩进是正确的。
-
很好。好吧,如果没有更多的上下文,目前这个问题似乎是无法回答的。
.movie-frame是视图的子/后代吗? -
@Vohuman 我更新了我的帖子,提供了更多细节。
.movie-frame(到目前为止我可以看到)只是一个由 Entry 视图呈现的容器。 -
问题可能是在我的 Movie Rails 控制器中我没有定义销毁方法吗?
标签: javascript jquery mysql ruby-on-rails backbone.js