【问题标题】:Raise click event on an element from another template在另一个模板中的元素上引发点击事件
【发布时间】:2014-10-25 14:48:26
【问题描述】:

我创建了一个用于保存和显示模型的视图。它有这样的事件,

events: -> 
  "click li": "addEntry" 
  "click .remove": "destroyEntry" 

addEntry: (e) -> 
  movie_title = $(e.target).text()
  @collection.create title: movie_title

appendEntry: (entry) ->
  view = new Movieseat.Views.Entry(model: entry)
  $('#entries').append(view.render().el)

destroyEntry: (e) -> 
  thisid = @$(e.currentTarget).closest('div').data('id')
  @collection.get(thisid).destroy()

现在,如果我在模板中添加一个 li 元素并单击它,addEntry 事件将被触发并将模型保存到我的 Rails 数据库中。我的destroyEntry 事件也可以删除模型。当模型被添加到集合中时,appendEntry 函数会被触发。

但我使用不同的视图来显示列表中的电影集合。现在我想将 click li 事件连接到不同模板上的 li。这可能吗?如果有,怎么做?

【问题讨论】:

    标签: javascript jquery ruby-on-rails backbone.js


    【解决方案1】:

    在您的其他视图中,您可以使用相同的数据源。在这种情况下,它是电影的集合。由于它是主干,并且视图实际上只是数据模型的表示,因此使用数据来呈现或触发视图中的更改。

    在另一个视图中,观察正在被操作的集合的变化。当您真正关心的是正在更改的数据时,无需委托事件。

    OtherView = Backbone.View.extend
      initialize: (params) ->
        # this could also be the model, I'm not sure how you have this configured
        @listenTo params.movieseats, "change", @updateMovies
    
      updateMovies: ->
        # manage the view here
    

    【讨论】:

    • 有意义,但我如何引用其他集合?如果我在其他视图中使用addEntry: (e) -> movie_title = $(e.target).text() @collection.create title: movie_title,代码会选择错误的集合,从而导致错误OPTIONS http://api.themoviedb.org/3/search/movie?api_key=a8f7039633f2065942cd8a28d7cadad4&query=star XMLHttpRequest cannot load http://api.themoviedb.org/3/search/movie?api_key=a8f7039633f2065942cd8a28d7cadad4&query=star. Invalid HTTP status code 404
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多