0

バックボーン フレームワークと Parse.com をバックエンド サービスとして使用して、Phonegap 用のアプリケーションを作成しています。Parse.com でオブジェクトを作成します (Backbone モデルに対応)。このオブジェクトには、Parse.com 関数の save() を呼び出すsaveDraftToP()メソッドがあります。このメソッドがビューから呼び出された後、更新されたオブジェクトを取得したいと思います。そうするために、「変更」イベントをモデルにバインドしていますが、Parse に割り当てられた ID は未定義です。モデルのコードは次のとおりです。

  var Match = Parse.Object.extend("Match", {
  states: {'DRAFT': 0, 'RUNNING': 1, 'ENDED': 2},
  saveDraftToP: function () {
    var self = this;
    this.save({
      user: Parse.User.current(),
      ACL: new Parse.ACL(Parse.User.current()),
      state: self.states.DRAFT
    }, {
      success: function (result) {
        self = result;
      },
      error: function (e) {

      }
    });
  }
});`

ビューのコードは次のとおりです。

       var vmNuovaPartita = Parse.View.extend({
            template: Handlebars.compile(template),
            model: new Match(),
            collection: new HintCollection(),
            initialize: function () {
                this.bind("change:model", console.log(this.model.id) , this);
            },

            render: function (eventName) {
                var match = this.model.toJSON();
                $(this.el).html(this.template(match));
                return this;
            }
        });
4

1 に答える 1

0

保存関数が別の保存のような関数にラップされている理由がよくわかりません。:-)

オブジェクトであるようなmyMatchものがあるとします。

UI を介してボタンをクリックすると、オブジェクト データが保存されます。箱から出してそのまま使えmyMatch.save({attr:val, ...})ます。バックボーン (および解析) はデフォルトで楽観的です。つまり、サーバーへの永続化が成功することを期待して、モデルの値を設定します。

したがって、余分なものを取得する必要はありません。モデルはすでに最新の状態になっています。

これらの変更に対応するモデル ビューを作成するには、ビューの設計を少し変更します。

var vmNuovaPartita = Parse.View.extend({
        template: Handlebars.compile(template),
        initialize: function () {
            this.model.on('change', this.render);
        },
        render: function (eventName) {
            var match = this.model.toJSON();
            $(this.el).html(this.template(match));
            return this;
        }
    });

var myView = new vmNuovaPartita({
    model: myModel
});

ビューの外でモデルを初期化し、新しいビューを生成するときにオプションとして渡します。モデルをオプションとして渡すと、それは特別で、ビューに直接アタッチされます... view.model ビューコード内で this.model として参照できます

init では、変更イベントのモデルにリスナーを配置し、ビューの再レンダリングを開始します。または、この種のことを行うより良い方法は、.listenTo()メソッドを使用して新しいバックボーン イベントをスローすることです。

于 2013-06-27T16:52:21.250 に答える