ฉันจะระบุไดเร็กทอรีทางเลือกสำหรับเทมเพลต HandlebarsJS ของฉันด้วย ember-rails gem ได้อย่างไร

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

ในแอปพลิเคชันเวอร์ชันธรรมดา วานิลลา โครงสร้างไดเร็กทอรีของฉันคือ:

./app/
  assets/
    javascripts
      application.js
      ember-app.js
      routes.js
      store.js
      models/
      controllers/
      routes/
      templates/
      views/

ด้วย: application.js

//= require jquery
//= require jquery_ujs
//= require handlebars
//= require ember
//= require ember-data
//= require_self
//= require ember-app
App = Ember.Application.create();

และ: ember-app.js

//= require ./store
//= require_tree ./models
//= require_tree ./controllers
//= require_tree ./views
//= require_tree ./helpers
//= require_tree ./templates
//= require ./router
//= require_tree ./routes

ทุกอย่างทำงานได้ดี อย่างไรก็ตาม ฉันต้องการย้ายไฟล์ ember-app และโค้ด ember javascript ทั้งหมดลงหนึ่งระดับ และเมื่อฉันทำเช่นนั้น เทมเพลตจะไม่แสดงผล (ส่วนหนึ่งของแอปพลิเคชันใช้ Ember แต่ไม่ใช่แอปพลิเคชันทั้งหมด และฉันกำลังพยายามตั้งค่าสองเส้นทางแยกกันผ่านไปป์ไลน์สินทรัพย์)

โครงสร้างที่ต้องการคือ:

./app/
  assets/
    javascripts
      application.js
      embro/
        ember-app.js
        routes.js
        store.js
        models/
        controllers/
        routes/
        templates/
        views/

ด้วย: application.js (แก้ไข: 'require ember-app' กลายเป็น 'require embro/ember-app')

//= require jquery
//= require jquery_ujs
//= require handlebars
//= require ember
//= require ember-data
//= require_self
//= require embro/ember-app
App = Ember.Application.create();

(ember-app.js ไม่มีการแก้ไข)

อย่างที่ฉันบอกไป หลังจากย้ายแล้ว ไม่มีเนื้อหาเทมเพลตใดปรากฏบนหน้าจอ ไม่มีข้อผิดพลาดบนหน้าจอหรือในคอนโซล มีเพียงแอปพลิเคชันถ่านที่ว่างเปล่า

เมื่อฉันตรวจสอบ Ember.TEMPLATES ในคอนโซล เทมเพลตที่คาดหวังทั้งหมดจะถูกแสดงรายการ นอกจากนี้ หากฉันใส่เนื้อหาที่ต้องการลงในเทมเพลต x-handlebars ในมุมมอง Rails ที่เหมาะสม เนื้อหาจะเรนเดอร์ได้สำเร็จ เช่นเดียวกับที่ทำกับโครงสร้างไดเร็กทอรีดั้งเดิม

ตัวอย่างเช่น ใน apps/views/welcome/index.html....

<script type="text/x-handlebars" data-template-name="application">
  <h1>hello</h1>
  {{ outlet }}
</script>

<script type="text/x-handlebars" data-template-name="index">
  <h1>this is the index</h1>
</script>

... และเราก็พร้อมที่จะไปอีกครั้ง

แต่ถ้าผมปล่อยรางให้ว่างเหมือนที่ผมทำกับโครงสร้างเดิม มันก็ไม่ไป

สงสัยว่าบางทีอัญมณี ember-rails จำเป็นต้องมีเทมเพลตแฮนด์บาร์แสดงใน app/assets/javascripts/templates หรือไม่ และมีวิธีแทนที่สิ่งนี้หรือไม่ เอกสารกล่าวถึงการเพิ่มตัวเลือก templates_root ให้กับบล็อกการกำหนดค่าแอปพลิเคชัน และฉันสงสัยว่านี่คือกุญแจสำคัญหรือไม่ ฉันเล่นไปบ้างแล้ว ยังไม่มีโชคเลย

มีความคิดอะไรบ้าง?


อัปเดต:

กลัวว่าฉันไม่มีโชคกับตัวเลือก templates_root จากการทดลอง ฉันพยายามสร้างแอป Rails ใหม่ที่เรียบง่าย และใช้ตัวสร้างบูตสแตรป ember-rails เพื่อเริ่มต้นและรัน ทุกอย่างเป็นไปด้วยดี แต่ถ้าฉันพยายามเปลี่ยน ชื่อ ของโฟลเดอร์เทมเพลต (เช่น app/assets/javascripts/templates -> app/assets/javascripts/temple) โดยมีการเปลี่ยนแปลงที่เหมาะสมกับเฟือง รวมและกำหนดค่าไฟล์ ฉันได้ผลลัพธ์เดียวกัน

มีโอกาสที่ตัวเลือก templates_root จะใช้งานไม่ได้หรือไม่

ฉันใช้ Ruby 1.9.3, Rails 3.2.11, ember-rails 0.10.0

ตัวชี้ใด ๆ ที่ฉันควรดูในซอร์สโค้ด ember / ember-rails / handlebars เริ่มเพ้อเจ้อแล้ว

ขอบคุณ!


comment
แม้ว่า templates_root จะใช้งานได้ซึ่งยังคงจำกัดให้คุณใช้เพียงเนมสเปซเดียวเท่านั้น ฉันต้องการทำเช่นเดียวกัน แต่ก็มีบางอย่างเช่นส่วน admin.js และ admin/templates   -  person ootoovak    schedule 07.04.2013


คำตอบ (1)


คุณพูดถูกแล้วที่ต้องตั้งค่า templates_root ลองเพิ่ม

config.handlebars.templates_root = 'embro/templates'

ไปยังบล็อกการกำหนดค่าใน application.rb หรือ

RailsApp::Application.config.handlebars.templates_root = 'embro/templates/'

ไปยังเครื่องมือเริ่มต้นใหม่ โดยที่ RailsApp คือชื่ออะไรก็ได้ที่แอปพลิเคชันของคุณ

แก้ไข:

ฉันสามารถจำลองพฤติกรรมที่คุณอธิบายด้วย templates_root ได้ การแก้ไขสำหรับฉันคือการลบโฟลเดอร์ /tmp ของแอปพลิเคชันของฉันและรีสตาร์ท Rails หลังจากนั้นจึงตั้งชื่อเทมเพลตให้ถูกต้อง

แก้ไข:

แม่นยำยิ่งขึ้น คุณต้องล้างแคชเฟืองที่ /tmp/cache/assets หลังจากเปลี่ยน templates_root

แก้ไข:

ตามที่กล่าวไว้ในความคิดเห็นด้านล่าง rake tmp:cache:clear แบบธรรมดาควรช่วยแก้ปัญหา

person ahmacleod    schedule 19.02.2013
comment
เลเกน....รอก่อน......แดรี่ ฉันเอาหัวโขกกำแพงมาหลายชั่วโมงแล้ว และสิ่งที่ฉันต้องทำคือลบไดเร็กทอรีไอ้ /tmp ขอบคุณ - person Aaron Chambers; 27.02.2013
comment
มีความคิดเห็นเกี่ยวกับการใช้เทคนิคข้างต้นสำหรับแอปเนมสเปซ Ember หรือไม่ stackoverflow.com/questions/15859552/ - person ootoovak; 09.04.2013
comment
ขอบคุณ มันเริ่มน่าหงุดหงิดจริงๆ ฉันยังอ่านส่วนนั้นเกี่ยวกับการล้างแคชเนื้อหาใน readme ของ ember-rails ด้วยซ้ำ แต่ฉันเดาว่า... - person Ryan; 26.06.2013
comment
หากต้องการล้าง tmp Rails มีงานเรค rake tmp:clear สำหรับสิ่งนี้ - person lillq; 04.02.2014