วิธีดึงวัตถุจาก Parse.com หลังจากบันทึก

ฉันกำลังสร้างแอปพลิเคชันสำหรับ Phonegap โดยใช้ Backbone Framework และ Parse.com เป็นบริการแบ็กเอนด์ ฉันสร้างวัตถุด้วย Parse.com (ตรงกับรุ่น Backbone) วัตถุนี้มีเมธอด saveDraftToP() ที่เรียกฟังก์ชัน Parse.com save() หลังจากที่เรียกเมธอดนี้จากมุมมองแล้ว ฉันต้องการดึงออบเจ็กต์ที่อัปเดตแล้ว ในการทำเช่นนั้น ฉันกำลังเชื่อมโยงเหตุการณ์ 'การเปลี่ยนแปลง' กับโมเดล แต่ไม่ได้กำหนด 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;
            }
        });

person fcicer    schedule 12.05.2013    source แหล่งที่มา


คำตอบ (1)


ฉันไม่แน่ใจว่าทำไมคุณถึงมีฟังก์ชันบันทึกรวมอยู่ในฟังก์ชันที่คล้ายกับการบันทึกอื่น :-)

สมมติว่าคุณมีบางอย่างเช่น myMatch ซึ่งเป็นวัตถุ

ผ่าน UI ของคุณ การคลิกปุ่มจะบันทึกข้อมูลออบเจ็กต์ คุณสามารถใช้ myMatch.save({attr:val, ...}) ได้เลยทันที Backbone (และแยกวิเคราะห์) โดยค่าเริ่มต้นนั้นเป็นแง่ดี นั่นหมายความว่า คุณจะตั้งค่าของโมเดลด้วยความคาดหวังว่าการคงอยู่ในเซิร์ฟเวอร์จะสำเร็จ

ดังนั้นคุณไม่จำเป็นต้องเรียกค้นสิ่งใดเพิ่มเติม คุณมีโมเดลอยู่ในสถานะปัจจุบันที่สุดแล้ว

เพื่อให้มีมุมมองแบบจำลองที่ตอบสนองต่อการเปลี่ยนแปลงเหล่านี้ ฉันจะออกแบบมุมมองให้แตกต่างออกไปเล็กน้อย

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 ... view.model ซึ่งคุณสามารถอ้างอิงภายในโค้ดมุมมองของคุณได้เป็น this.model

ในการเริ่มต้น เราวางผู้ฟังไว้บนโมเดลสำหรับเหตุการณ์การเปลี่ยนแปลง จากนั้นจึงเริ่มการเรนเดอร์มุมมอง หรือวิธีที่ดีกว่าในการทำสิ่งนี้คือการใส่ Backbone Events ที่ใหม่กว่าด้วยเมธอด .listenTo()

person jmk2142    schedule 27.06.2013