1

シングルページアプリ用にマリオネットとハンドルバーをセットアップしています。このプロジェクトを始めたのは私ではありません。それは最初に他の誰かによって開発されました。

他のファイルの内容を理解することはできましたが、これを理解することはできません。

だから、私はmodels/order.coffeeを持っています

Model = require './model'
Collection = require './collection'

module.exports = class OrderModel extends Model
  # This is the *real* orders model
  idAttribute: 'uid'
  defaults:
    title: 'some order'

module.exports = class Orders extends Collection
  model: OrderModel

  url: base_url+'history/'

  initialize: =>
    super
    @fetch()

  parse: (response) =>
    return response.objects

parseバックエンドがデータを返す方法が原因です。response.objectsモデルの作成元となる JSON オブジェクトのリスト、つまりOrderModelインスタンス\

次にあるのはviews/SettingsOrderView.coffee

template = require './templates/settings/orders'

module.exports = class SettingsOrdersView extends Backbone.Marionette.ItemView
    template: template
    events: 'click #back_to_options': 'goToOptions'

    serializeData: =>
        data = @.collection
        setTimeout (-> console.log(data.models)), 5000
        $.each data.models, (m_index, m) =>
            console.log(m)

        return {items: @.collection}

私の問題は、私が行うテンプレートにあり{{#each items}}ますが、それらは OrderModel のインスタンスであるため、Handlebars では役に立ちません。それらを JSON オブジェクトとして作成する必要がありますが、何らかの理由で (実際には) に入力されcollection.fetch()ません。5 秒後 ( を参照)は、まさに必要なもののリストですが、その時点では空のリストであるため、 は実行されません。@.collection.modelsserializeDatasetTimeoutdata.modelseachdata.models

前述のように、モデルを JSON 化する必要がありますが、利用できません。どうすればこれを修正できますか?

他のデータが必要な場合は、コメントしてください。投稿します。

ありがとう。

4

1 に答える 1

1

コレクションをレンダリングするために、Marionette は CollectionView を提供します: https://github.com/marionettejs/backbone.marionette/blob/master/docs/marionette.collectionview.md

複数のアイテムに CollectionView または ItemView をいつ使用するかについては、次の優れた記事を参照してください 。 -クリックされた要素/

モデルをシリアル化するには、モデルで model.toJSON() を呼び出すことができます。または、get() 関数を使用するか、モデルやコレクションに独自の JSON メソッドを記述して、単一の属性を取得することもできます。その場合、コレクションでそのメソッドを呼び出すだけです。

しかし、あなたの本当の問題は fetch() の呼び出しだと思います。私があなたを正しく理解していれば、あなたがそれらを使おうとしている時までにモデルが欠けているようです. Backbone は、この状況に対して成功のコールバックを提供します。このコールバックは、データの準備ができたときに呼び出されます。

http://backbonejs.org/#Collection-fetch

さて、私はこれを自分で使用したことはありません-バックボーン同期メカニズムの代わりにWebsocketsとpromiseを使用しています-しかし、この記事を覗いてみると、これはあなたの場合に役立つかもしれません:

http://lostechies.com/derickbailey/2012/02/03/get-a-model-from-a-backbone-collection-without-knowing-if-the-collection-is-loaded/

于 2013-07-30T11:32:25.783 に答える