2

より多くのコンテキストで編集されました。$CONSTRUCTOR = passed_in の場合、Firefox と Chrome で「passed_in はコンストラクタではありません」とスローされます。$CONSTRUCTOR = not_passed_in の場合、

  initialize: (options) ->
    @collection.bind 'all', @render
    $('.search_box').parent('form').submit (event) => 
      @loading()
      event.preventDefault()
      query = $(event.target).find('.search_box').val()
      window.app.navigate('?query=' + query, trigger: true)
    passed_in = PaginationView
    @render(passed_in)

  render: (passed_in)=> 
    if @collection.isEmpty() && @collection.query
      @$el.html(JST['users/no_results'](query: @collection.query))
    else if @collection.isEmpty() # Not loaded yet
      @$el.html("<div class='loading'></div>")
    else
      html = JST['users/user_list'](@viewData())
      @$el.html(html)
      for user in @collection.models
        html = new UserListItemView(model: user).render().el
        @$('tbody.users').append(html)

      not_passed_in = PaginationView
      new $CONSTRUCTOR(
        type: "user"
        el: @$('.paginate')
        model: @collection
        data: {}
        onError: @onError
      ).bind('change', @loading)

これは CoffeeScript の既知の (バグ|機能) ですか? それとも私は何か間違ったことをしていますか?

(これらは Backbone.coffee ビューにあります。関連性があるとは思えません)

4

1 に答える 1

0

問題を単純化するには:

MyView = Backbone.View.extend

    initialize: (options) ->
        passed_in = PaginationView
        @render(passed_in)

    render: (passed_in) => 
          not_passed_in = PaginationView
          new passed_in(
            type: "user"
            el: @$('.paginate')
            model: @collection
            data: {}
            onError: @onError
          ).bind('change', @loading)

1)通常、@ renderの最後の行は、@またはthis別のビューではありません。

2)最も可能性の高い問題@render()は、引数なしで呼び出している他のコードがあることです。次のようなデフォルトの引数を指定することをお勧めします。

render: (passed_in=PaginationView) =>

3)PaginationViewを作成するMyViewと、スタックオーバーフローエラーが発生する可能性があります。

  • MyView.initializeは、renderを呼び出します。
  • PaginationView.initializeを呼び出します
  • MyView.initializeを呼び出します
  • ..ループ。

4)JSON.stringifyはpassed_inいつでも呼び出されますか?もしそうなら、それは関数をに変換しますundefined

passed_in = JSON.stringify(passed_in)
undefined == passed_in
# always true if passed_in is a function
于 2012-08-23T07:57:30.193 に答える