Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将视图连接到主干中的集合_Javascript_Backbone.js - Fatal编程技术网

Javascript 将视图连接到主干中的集合

Javascript 将视图连接到主干中的集合,javascript,backbone.js,Javascript,Backbone.js,我已经创建了一个视图,用于呈现带有inputfield的模板。在inputfield中键入文本时,它会激活一个事件,创建一个新视图,并将其附加到此视图中正在渲染的元素 class Movieseat.Views.Moviesearch extends Backbone.View template: JST['movieseats/moviesearch'] el: '#moviesearch' initialize: (opts) -> {@collection}

我已经创建了一个视图,用于呈现带有inputfield的模板。在inputfield中键入文本时,它会激活一个事件,创建一个新视图,并将其附加到此视图中正在渲染的元素

class Movieseat.Views.Moviesearch extends Backbone.View

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

  initialize: (opts) ->
    {@collection} = opts
    @render()
    return

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

  events:
    "keyup input": "doSearch"

  doSearch: (e) ->
    @collection.setQuery $(e.currentTarget).val()
    @collection.fetch()
    view = new Movieseat.Views.Searchresult()
    $('#movies').append(view.render().el)
如果我没有弄错,视图和集合是“链接”的,因为
Moviesearch
名称

但是对于我的Searchresult视图,我使用了这个。我想我没有把这和我的电影研究收藏联系起来

class Movieseat.Views.Searchresult extends Backbone.View

  template: JST['movieseats/searchresult']

  render: -> 
    $(@el).html(@template(movie: @collection))
    this
在我渲染的模板中,我有以下代码

Movie result template

<% for movie in @movie.results : %> 
    <li><%= movie.original_title %></li> 
<% end %>

我认为将searchresult视图与moviesearch集合连接是个问题,对吗?

你需要做
@template(@collection)
,而不仅仅是
@template()
我不知道coffeescript,所以我会用javascript编写

有两件事:

首先,集合获取在默认情况下是异步的,因此仅当获取完成时才呈现视图

this.collection.fetch().done(function(){
    view = new Movieseat.Views.Searchresult()
    $('#movies').append(view.render().el)
});
其次,将集合传递给视图

view = new Movieseat.Views.Searchresult({collection:collection});
第三,保存集合引用

Movieseat.Views.Searchresult = Backbone.view.extend({
  initialize:function(opts){
    this.collection = opts.collection;
  }
});

在我的
类Movieseat.Views.Moviesearch
中,我已将
render:->$(@el.template())
更改为
render:->$(@el.html(@template(@collection))
,但我仍然得到了
未捕获的类型错误:无法读取未定义的
错误的属性“结果”。
类Movieseat.Views.Searchresult w
如何知道使用哪个集合?
Movieseat.Views.Searchresult = Backbone.view.extend({
  initialize:function(opts){
    this.collection = opts.collection;
  }
});