0

わかりました。divに適用すると、プリローダーイメージを使用してそのdiv内のすべてのイメージを適切にロードする単純なJQueryプラグインがあります。これは正常に機能します。

ただし、Backboneでは、ページが読み込まれた後、JSONから要素にデータを追加しています。したがって、以下のコードは機能しません。

$(document).ready( ->
    $("#theList").preloader()
)

したがって、リストが生成された後、レンダリング関数に「$( "#theList")。preloader()」を配置する必要があります。

class HomeView extends Backbone.View
constructor: ->
    super

initialize: ->
    @isLoading = false

events: {
     "click #nextPage": "nextPage"
     "click #prevPage": "prevPage"  
}


template: _.template($('#home').html())
theListTemplate: _.template($('#theList').html())

render: ->
    $(@el).append(@template)
    @loadResults()
    $("#theList").preloader() #<----------------- DOESN'T WORK NOW


loadResults: () ->
    @isLoading = true

    Properties.fetch({
        success: (data) =>

            #Append properties to list
            $('#theList').append(@theListTemplate({data: data.models, _:_})).listview('refresh')


        error: ->
            @isLoading = false
            alert('Unable to load information')
    })

ただし、コード行はバックボーンビュー/モデル/コントローラーなどの中にあり、機能しません。

参考までに、このようにアプリケーションをロードします。

$(document).ready( ->
    console.log('document ready')
    app.AppRouter = new AppRouter()
    Backbone.history.start()
)

どんな助けでも大歓迎です!ありがとう。

4

1 に答える 1

2

プリローダーが追加されたノードで動作することを意図していないと仮定すると(プリローダーを呼び出すまでにフェッチが返されないため)、関数の実行中にビューが一部ではないloadResults#fetch#successことが問題であると思われますまだDOMの。render()el

あなたがHomeViewのように呼び出す場合

myHomeView = new HomeView()
$('some selector').append(myHomeView.render().el)

HomeViewのelはまだDOMに追加されておらず、切り離されたドキュメントにあります。

したがって、jQueryセレクター$("#theList")はDOMを検索するため、空の結果を返します。これは、そのセレクターの結果であるconsole.log'nを使用するか、デバッガーを使用してブレークポイントを設定し、コンソールを使用してテストすることで簡単に確認できます。

ありがたいことに、修正は簡単です。ビューにスコープされたjQuery参照を使用して、セレクターをビューにスコープすることにより、切り離されたドキュメントを参照する必要があります。

@$("#theList").preloader()

または、自分でそれを行うことによって

$(@el).find("#theList").preloader()
于 2012-08-21T16:34:35.453 に答える