为什么在传递给视图时主干过滤器收集失败

里卡多·卡斯塔内达(Ricardo Castaneda)

我有两种方法来过滤集合:

方法1:当我将其传递给视图时,使用此方法失败。

byCategory = @projects.byCategory(data)

方法2:此方法效果很好。

byCategory = new App.Collections.Projects(@projects.byCategory(data))


当我按byCategory映射并获得标题时,这两种方法均适用:

byCategory.map (project) ->
  console.log project.get('title')


当我将其传递给视图时,第二种方法有效。但是第一种方法失败了:

view = new App.Views.ProjectsCarousel(collection: byCategory)
$('.slides').html(view.render().el);

我的问题是:为什么?为什么第一个传递给视图时会失败,第二个为什么会起作用?第一个产生错误日志:TypeError: _ref is undefined


完整代码在这里:

路由器

class App.Routers.PortfolioRouter extends Backbone.Router
  routes:
    '': 'index'

  index: ->
    controls = new App.Views.ProjectsControls({el: '#list', projects: new App.Collections.Projects()});

收藏

class App.Collections.Projects extends Backbone.Collection
  url: '/de/projects'

  byCategory: (cat) ->
    return @where category: cat

观看次数

class App.Views.ProjectsControls extends Backbone.View

  events:
    'click a': 'selectCategory'

  initialize: (options) ->
    @projects = options.projects
    @projects.fetch()

  selectCategory: (event) ->
    event.preventDefault()

    data = $(event.currentTarget).attr('data-category')
    # This method fails when I pass it to the view
    # byCategory = @projects.byCategory(data)
    # This method works very well, why does it work and the previous no?
    byCategory = new App.Collections.Projects(@projects.byCategory(data))

    # it works with both methods
    byCategory.map (project) ->
      console.log project.get('title')

    view = new App.Views.ProjectsCarousel(collection: @projects)
    $('.slides').html(view.render().el);    



class App.Views.ProjectsCarousel extends Backbone.View
  template: JST['projects/carousel']

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

模板

<% for project in @projects.models: %>
  <%= project.get('title') %>
<% end %>
饼干

TL; DR

我假设会@projects.byCategory(data)传回的阵列Backbone.model,而视图则需要的实例Backbone.Collection在您看来,您可能正在使用this.collection.models一个迭代*,并且这.models是您肯定不会在的普通数组中找到的属性Backbone.model

*如果您正在调用collection.fetch()或什至甚至.set()其他Backbone.Collection方法则该参数成立


我的直觉(除非您另有说明)是

App.Collections.Projects.byCategory()

返回的数组Backnone.model,可能通过.map().pluck()这个假设将回答您的问题并满足您的.map()测试。

问题1:为什么传递byCategory = @projects.byCategory(data)失败?

因此,如果我的假设是正确的,则该byCategory变量不过是的JavaScript数组Backbone.model这不是Backbone在使用该Backbone.View.collection属性时所期望的,例如,当您执行时fetchset或者只是尝试进行迭代collection.models(并且简单的数组model不包含.modelsprop)。

问题2:为什么.map()总是可以工作?

答案并不明显。显然Backbone.collection.map,由于默认情况下_.map()已混入,因此工作会很顺利Backbone.Collection

.map()起作用的原因byCategory === @projects.byCategory(data)取决于两件事。1.byCategory是一个数组,因此,我假设您使用的是兼容ECMASCRIPT 5的浏览器,它Array.prototype.map()可以正常工作。而且它接受与混入相同的链接约定,_.map()并采用与相同的Array参数_.map()因此,实际上,您很容易被愚弄,以为您正在使用Backbone.collection.map(),而实际上您在使用Array.prototype.map()

问题仍然存在,为什么该.get('title')方法在

console.log project.get('title')

工作?给出以上,很简单。由于您传入了一个Backone.modelto数组Array.prototype.map(),因此每次迭代中的参数都是Backone.model,它将很高兴地接受Backone.model.get()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么这些rsync过滤器args在数组中传递时在bash中失败?

来自分类Dev

每个类别中的主干过滤器产品(Filter参数将为类别名称)

来自分类Dev

将过滤器数组传递给指令

来自分类Dev

将多个参数传递给Pig过滤器UDF

来自分类Dev

无法使用%in%将列表传递给dplyr过滤器

来自分类Dev

如何将变量传递给过滤器

来自分类Dev

将对象属性数组传递给过滤器

来自分类Dev

Laravel:将路由参数传递给过滤器参数

来自分类Dev

函数中指定的参数自动传递给过滤器

来自分类Dev

将参数传递给过滤器函数的Javascript?

来自分类Dev

将结果传递给 PowerShell 中的类似过滤器

来自分类Dev

Angular:为什么我的过滤器仅在采用性能较低的方法时才起作用(?)

来自分类Dev

为什么在Webkit过滤器悬停时堆叠顺序会发生变化?

来自分类Dev

当工作表具有过滤器时,为什么ActiveSheet.FilterMode返回False?

来自分类Dev

在迭代器上使用过滤器时,为什么会得到不同的参数类型?

来自分类Dev

为什么创建过滤器时 CITemperatureAndTint 的参数键会引发 NSUnknownKeyException 错误?

来自分类Dev

为什么“return s and s.strip()”在使用过滤器时起作用?

来自分类Dev

尝试将键和值同时传递给jq过滤器表达式时出错

来自分类Dev

语言过滤器失败的适当响应头是什么?

来自分类Dev

为什么jq有时需要过滤器表达式,而有时则不需要过滤器表达式?

来自分类Dev

为什么jq有时需要过滤器表达式,而有时则不需要过滤器表达式?

来自分类Dev

Django视图/过滤器

来自分类Dev

Django视图/过滤器

来自分类Dev

为什么过滤器和过滤器映射(与 Servlet 相同)是分开定义的?

来自分类Dev

为什么过滤器部分撞到底部?

来自分类Dev

为什么此过滤器无法正常工作?

来自分类Dev

蓝鸟承诺过滤器。为什么要使用数组?

来自分类Dev

为什么我的git过滤器没有被调用?

来自分类Dev

为什么此Angular JS过滤器删除空格?

Related 相关文章

  1. 1

    为什么这些rsync过滤器args在数组中传递时在bash中失败?

  2. 2

    每个类别中的主干过滤器产品(Filter参数将为类别名称)

  3. 3

    将过滤器数组传递给指令

  4. 4

    将多个参数传递给Pig过滤器UDF

  5. 5

    无法使用%in%将列表传递给dplyr过滤器

  6. 6

    如何将变量传递给过滤器

  7. 7

    将对象属性数组传递给过滤器

  8. 8

    Laravel:将路由参数传递给过滤器参数

  9. 9

    函数中指定的参数自动传递给过滤器

  10. 10

    将参数传递给过滤器函数的Javascript?

  11. 11

    将结果传递给 PowerShell 中的类似过滤器

  12. 12

    Angular:为什么我的过滤器仅在采用性能较低的方法时才起作用(?)

  13. 13

    为什么在Webkit过滤器悬停时堆叠顺序会发生变化?

  14. 14

    当工作表具有过滤器时,为什么ActiveSheet.FilterMode返回False?

  15. 15

    在迭代器上使用过滤器时,为什么会得到不同的参数类型?

  16. 16

    为什么创建过滤器时 CITemperatureAndTint 的参数键会引发 NSUnknownKeyException 错误?

  17. 17

    为什么“return s and s.strip()”在使用过滤器时起作用?

  18. 18

    尝试将键和值同时传递给jq过滤器表达式时出错

  19. 19

    语言过滤器失败的适当响应头是什么?

  20. 20

    为什么jq有时需要过滤器表达式,而有时则不需要过滤器表达式?

  21. 21

    为什么jq有时需要过滤器表达式,而有时则不需要过滤器表达式?

  22. 22

    Django视图/过滤器

  23. 23

    Django视图/过滤器

  24. 24

    为什么过滤器和过滤器映射(与 Servlet 相同)是分开定义的?

  25. 25

    为什么过滤器部分撞到底部?

  26. 26

    为什么此过滤器无法正常工作?

  27. 27

    蓝鸟承诺过滤器。为什么要使用数组?

  28. 28

    为什么我的git过滤器没有被调用?

  29. 29

    为什么此Angular JS过滤器删除空格?

热门标签

归档