Cara mengambil objek dari Parse.com setelah menyimpannya

Saya membuat aplikasi untuk Phonegap menggunakan kerangka Backbone dan Parse.com sebagai layanan backend. Saya membuat objek dengan Parse.com (sesuai dengan model Backbone). Objek ini memiliki metode saveDraftToP() yang memanggil fungsi Parse.com save(). Setelah metode ini dipanggil dari tampilan, saya ingin mengambil objek yang diperbarui. Untuk melakukannya, saya mengikat acara 'perubahan' ke model tetapi ID Parse yang ditetapkan tidak ditentukan. Berikut kode modelnya:

  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) {

      }
    });
  }
});`

Dan berikut kode tampilannya:

       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;
            }
        });

person fcicer    schedule 12.05.2013    source sumber


Jawaban (1)


Saya tidak begitu yakin mengapa Anda memiliki fungsi simpan yang digabungkan dengan fungsi mirip simpan lainnya. :-)

Katakanlah Anda memiliki sesuatu seperti myMatch yang merupakan sebuah objek.

Melalui UI Anda, satu klik tombol akan menyimpan data objek. Anda dapat langsung menggunakan myMatch.save({attr:val, ...}) begitu dikeluarkan dari kotaknya. Backbone (dan Parse) secara default optimis. Artinya, Anda akan menetapkan nilai model dengan harapan bahwa bertahan di server akan berhasil.

Jadi, Anda tidak perlu mengambil tambahan apa pun. Anda sudah memiliki model dalam kondisi terkini.

Untuk memiliki tampilan model yang merespons perubahan ini, saya akan mendesain tampilannya sedikit berbeda.

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
});

Saya akan menginisialisasi model di luar tampilan, lalu meneruskannya sebagai opsi saat Anda membuat tampilan baru. Saat Anda memasukkan model sebagai opsi, model tersebut spesial dan akan dilampirkan langsung ke view ... view.model yang dapat Anda rujuk di dalam kode tampilan Anda sebagai this.model

Di init kita menempatkan pendengar pada model peristiwa perubahan, lalu menjalankan rendering tampilan. Atau cara yang lebih baik untuk melakukan hal semacam ini adalah dengan memasukkan Acara Backbone yang lebih baru dengan metode .listenTo().

person jmk2142    schedule 27.06.2013