คอลเลกชันที่เก็บไว้สำหรับการดูรายการหลายรายการ: หุ่นเชิด

ฉันมีมุมมองแบบรวมที่เรียกว่า QueueItems จากนั้นจะมี itemView สำหรับแต่ละองค์ประกอบในคอลเลกชันที่จะให้ฉันแก้ไขแต่ละองค์ประกอบเหล่านั้น แต่ละองค์ประกอบจะต้องสามารถเลือกจากคอลเลกชันแท็กหลายรายการได้ เช่น รัฐ บริษัท ฯลฯ ปัญหาคือฉันไม่แน่ใจว่าจะฝังสิ่งนี้ลงในมุมมองรายการแต่ละรายการได้อย่างไร ฉันไม่ต้องการโทรออกแต่ละครั้งที่มี itemView ดังนั้นฉันจึงวางคอลเลกชันไว้ในมุมมองแบบรวม แต่มีปัญหาของฉันเกิดขึ้นโดยที่ฉันไม่รู้ว่าจะเข้าถึงมันได้อย่างไร และถ้าฉันรู้ จะทราบได้อย่างไรว่า ajax ที่จะดึงคอลเลกชันประสบความสำเร็จหรือไม่

ความคิดข้อเสนอแนะ; อะไรก็ได้ที่เป็นประโยชน์ ขอบคุณ!


person Luke James Emery    schedule 05.05.2015    source แหล่งที่มา


คำตอบ (1)


คุณสามารถจัดเก็บคอลเลกชันในตำแหน่งที่สามารถเข้าถึงได้ทั่วโลก ฉันเคยเห็นผู้คนแนบมันเข้ากับออบเจ็กต์ Application ของพวกเขาเมื่อทำการบู๊ตแอปพลิเคชัน

App.States = new StatesCollection();
App.States.fetch();

หากคุณได้สร้างคอลเลกชันนี้ในออบเจ็กต์ CompositeView ของคุณ คุณสามารถส่งต่อให้บุตรหลานแต่ละคนได้โดยใช้พารามิเตอร์ childViewOptions

var QueueItems = Marionette.CompositeView.extend({
  childViewOptions: {
    states: this.states
  },

  initialize: function() {
     this.states = new StatesCollection();
     this.states.fetch();
  }
}

จากนั้นคุณก็สามารถคว้ามันได้ในการเริ่มต้น childView

var QueueItem = Marionette.ItemView.extend({
  initialize: function(options) {
    this.states = options.states;
  }
}

เท่าที่กังวลว่าจะโหลดแล้วหรือยัง คุณควรเพิ่ม Listener ลงใน ItemView ของคุณเพื่อแสดงผลทุกครั้งที่ซิงค์หรือรีเซ็ตคอลเลกชัน จากนั้นมันจะเรนเดอร์ตัวเองอีกครั้งทุกครั้งที่คุณดึงข้อมูลหรือโหลดคอลเลกชั่น

var QueueItem = Marionette.ItemView.extend({
  initialize: function(options) {
    this.states = options.states;
    this.listenTo(this.states, 'sync reset', this.render);
  }
}
person Tyler Marien    schedule 05.05.2015