使用Backbone以HTML格式显示JSON数据

时间:2014-10-23 08:59:07

标签: javascript json backbone.js

我的视图中有一个事件,其中keyup执行了对TMDB api的获取请求,

class Movieseat.Views.Moviesearch extends Backbone.View

  template: JST['movieseats/moviesearch']
  el: '#moviesearch'

  initialize: (opts) ->
    @collection.on('reset', @render, this)
    {@collection} = opts
    @render()
    return

  render: ->
    $(@el).html(@template(collection: @collection))
    return

  events:
    "keyup input": "doSearch"

  doSearch: (e) ->
    @collection.setQuery $(e.currentTarget).val()
    @collection.fetch()
    view = new Movieseat.Views.Movie()
    $('#movies').append(view.render().el)

这是我的收藏,

class Movieseat.Collections.Moviesearch extends Backbone.Collection

  url: -> "http://api.themoviedb.org/3/search/movie?api_key=a8f7039633f2065942cd8a28d7cadad4&query=#{@query}"

  setQuery: (q) ->
    @query = q
    return

因此,如果我的输入是inception,则这是获取请求,

http://api.themoviedb.org/3/search/movie?api_key=a8f7039633f2065942cd8a28d7cadad4&query=inception

正如您在我看来可以看到的那样,我附加了一个名为movies的模板。我想在该模板中显示获取请求中的所有original_title。并在模板发生变化时更新。

1 个答案:

答案 0 :(得分:1)

根据我的理解,您的收藏包含movie类型的元素或类似的元素。在fetch收集集合后,其模型应包含original_titleposter_path。现在,您可以使用pluck方法读取所有这些属性。代码应该看起来像那样(javascript):

collection.on("sync", function() {
    myView.displayTitles(collection.pluck("original_title"));
})

更新

通过发布此代码更新,我想知道为什么不在集合模板中使用这些属性。鉴于您的集合未声明其包含的模型类型,您无法使用@model.get('prop')语法,因为@model不是Backbone模型。尝试使用

@model.prop

语法代替。