1

テンプレートを本文に追加しています。これはjqueryモバイルでうまくレンダリングされます。ただし、データをループして個々のビューをレンダリングします-jquery mobile が失敗するようになりました..

もともと私は listview("refresh") を使用していましたが、まったく新しいビューをループすると、" jquerymobile エラー "初期化前にリストビューのメソッドを呼び出すことができません" というエラーが表示されます... また、trigger("create") を実装しても、どこに置いてもうまくいかないようです... 間違っているかもしれません。

別の質問でこれを行うことが提案されています...しかし、どこに配置すればよいか、それが機能するかどうかはわかりません:

$('#myListview').bind('pageinit', function() {
  $('#myListview').listview('refresh');
});

私は本当に立ち往生しています..誰かがこの問題を回避する方法に光を当てることができますか、ありがとう!

小さなビューをループする私の主なビューは..

class FavouritesListView extends Backbone.View
    initialize: =>
        Favourites.fetch()

    template: _.template($('#propertyFavourites').html())

    render: =>
        $(@el).append(@template)
        @addFavs()

    addFavs: =>
        Favourites.each (fav) =>
            view = new FavouriteView({model: fav})
            $("#favList", @el).append(view.render().el)

            #I've tried $("#favList", @el).append(view.render().el).listview("refresh") & get "cannot call methods on listview prior to initialization".. I've also tried .trigger("create") which doesn't work..

私のリストアイテムビューは(スタイルなしでレンダリングされています)...

class FavouriteView extends Backbone.View
    template: _.template($('#propertyFav').html())

    render: =>
        $(@el).html(@template({row: @model}))
        @

私のルーターとアプリはそのように読み込まれます..

class AppRouter extends Backbone.Router
    routes:
        "": "home"
        "favourites": "favourites"

    initialize: ->
        #handle back buttons
        $('.back').live('click', (event) -> 
            window.history.back();
            false
        )
        @firstPage = true;

    home: ->
        @changePage(new HomeView())

    favourites: ->
        @changePage(new FavouritesListView())

    changePage: (page, theTransition) ->
        $(page.el).attr('data-role', 'page')
        page.render()
        $('body').append($(page.el))

        if theTransition is undefined
            transition = $.mobile.defaultPageTransition
        else
            transition = theTransition

        #We don't want the first page to slide in
        if @firstPage
            transition = 'none'
            @firstPage = false

        $.mobile.changePage($(page.el), {changeHash: false, transition: transition})


$(document).ready( ->
    AppRouter = new AppRouter()
    Backbone.history.start()
)

参考までに、私はjqm 1.2.0 Alphaを使用しています...

どんな助けでも本当に感謝します、ありがとう

4

1 に答える 1

1

でメソッドlistviewを実行するたびに、あなたは一掃しているかもしれないと思います。新しいものを作成するたびに、それを再トリガーする必要があります。理想的には、その要素を保持し、完了したときにのみ内部要素を交換します。次に、彼らがそこに立ち往生しているときに行います。renderFavouritesListView<ul>createullifetch$('#favList').listview('refresh')

ただし、それには大幅な手直しが必要になるため、代わりに既存のコードでこれを試してみてください。

class FavouritesListView extends Backbone.View
    initialize: =>
        Favourites.fetch()

    template: _.template($('#propertyFavourites').html())

    render: =>
        @$el.append(@template)
        @addFavs()

    addFavs: =>
        # FYI: @$(...) is shorthand for this.$el.find(...)
        $favList = @$("#favList")
        Favourites.each (fav) =>
            view = new FavouriteView({model: fav})

            # TODO: batch these up and only do one append at the end for better performance.
            $favList.append(view.render().el)

        # Move this trigger out of the for loop, only trigger at the end.
        # Sometimes triggering create on the parent is better, not the actual list.
        @$el.trigger "create"

this.$el === $(this.el)また、いくつかの新しいバックボーン機能に基づいて、いくつかのことを微調整しましthis.$(...) === this.$el.find(...)た。

于 2012-09-26T21:10:04.263 に答える