2012-01-25 22 views
6

Tôi đang sử dụng công cụ tạo khuôn mặt gạch dưới của xương sống với các mẫu định dạng ria mép.xương sống/gạch dưới mẫu ở định dạng ria mép gây ra lỗi trên biểu tượng # pound/băm?

Tôi đã sử dụng thành công nó ở nơi khác trong dự án nhưng bây giờ lần đầu tiên tôi sử dụng mẫu danh sách vòng lặp từ ria mép để điền vào mẫu đang ném lỗi mà tôi hơi bối rối. Các lỗi trong chrome là:

"Uncaught SyntaxError: Unexpected token ILLEGAL" 

và điểm đến của nhấn mẫu hàm trong các vết lùi, mà là khá vô dụng nhưng trong firebug tôi nhận được một lỗi hữu ích hơn như thế này:

enter image description here

Đề xuất rằng biểu tượng băm '#' là vấn đề, điều này có ý nghĩa khi tôi biết rằng bộ ria mép đang hoạt động tốt vì có nhiều phần khác của dự án sử dụng nó tốt, đây cũng là lần đầu tiên tôi sử dụng băm băm mẫu của tôi.Nó trông giống như sự cố với tính năng lặp hoặc với interpola thiết lập tion/template cho gạch dưới.

Đây là mảnh liên quan của mẫu của tôi:

<div class="thumblist thumblistleft" id="currentprojectslist"> 
    <div class="thumb-list-header"> 
     <h2>current projects</h2> 
    </div> 
    <div class="thumb-list-area"> 
     <ol> 
     {{#worklist}}  <!----- LOOK HERE ---> 
      {{#current}} 
       <li><a>{{title}}</a></li> 
      {{/current}} 
     {{/worklist}} 
     </ol> 
    </div> 
</div> 

và đây là một mẫu của các JSON (mà tất cả các xác nhận tốt)

{blah blah blah lot in here before,"worklist":[{"thumb":"img/project-s.jpg","id":"340","title":"Test Project One","desc":"big load of content here","current":true}], and so on....} 

tôi đã bước đầu sau ví dụ này ở đây để tham khảo: http://mustache.github.com/#demo

NGAY BÂY GIỜ TÔI CÓ NGH THEA QUYỀN SỞ HỮU LÀ:

underscore.js cho thấy sử dụng này trước khi render một mẫu ria mép:

_.templateSettings = { 
    evaluate : /\{\[([\s\S]+?)\]\}/g, 
    interpolate : /\{\{([\s\S]+?)\}\}/g 
}; 

thêm:

interpolate : /\{\{(.+?)\}\}/g 

Cũng chỉ là tuyên bố Nội suy, ive đã cố gắng cả. Tuy nhiên kiến ​​thức regex của tôi là thực sự nghèo và tôi có một cảm giác nó có thể không chứa băm? Ở mức nào ... Tôi hoàn toàn bối rối. Ai đó có thể giúp tôi ở đây không?

thậm chí có thể lặp lại như thế này không? nhìn vào nguồn gạch tôi không chắc chắn: http://documentcloud.github.com/underscore/docs/underscore.html#section-120

Cảm ơn rất nhiều

+0

Mẫu '/ \ {\ {([\ s \ S] +?) \} \}/g' sẽ khớp với' {{# foo}} 'và capture' # foo'. Bạn có thể tránh bắt băm bằng cách sử dụng '/ \ {\ {#? ([\ S \ S] +?) \} \}/G', vì vậy tôi nghĩ nó sẽ gây ra các vấn đề khác. – Qtax

+0

bạn có bao giờ xoay sở như thế này không? Tôi thực sự muốn, nó rất khó chịu trong gạch dưới để viết ra một đơn giản nếu trên nhiều dòng đánh giá để kiểm tra xem một lá cờ là hiện diện trong JSON của tôi. – Daniel

+0

hey, đáng buồn gạch dưới sẽ không làm điều đó tự nhiên, bạn phải bao gồm mustache.js và làm mustache.render, như dưới đây .. Nó thực sự gây phiền nhiễu tôi đồng ý – Alex

Trả lời

7

tôi gửi bài cho cớ của bất cứ ai khác phải đối mặt với vấn đề này. Sau rất nhiều googling không có avail, tôi đã đi qua nguồn underscore.js với một chiếc lược có răng tốt và về cơ bản bạn phải sử dụng cú pháp mẫu của underscore, viết bộ xử lý hàm xấu xí vào JSON của bạn hoặc bao gồm bộ ria mép.js vào nguồn và gọi bạn:

Mustache.render(mytemplate,mymodel) 

và foresake gạch của

_.template(..) function 

Annoying nhưng bất cứ điều gì, tôi hy vọng rằng sẽ giúp người

23

Came lên chống lại vấn đề này ngày hôm nay. Vấn đề này có vẻ là thứ tự mà Underscore thực hiện việc tạo khuôn mẫu: escape, interpolate, sau đó đánh giá. Vì vậy, bạn cần phải bỏ qua một cách rõ ràng bất kỳ trận đấu cho {{# trong regex suy của bạn:

_.templateSettings = { 
    evaluate: /\{\{#([\s\S]+?)\}\}/g,   // {{# console.log("blah") }} 
    interpolate: /\{\{[^#\{]([\s\S]+?)[^\}]\}\}/g, // {{ title }} 
    escape:  /\{\{\{([\s\S]+?)\}\}\}/g,   // {{{ title }}} 
} 

Nó không thực sự làm việc theo cách tương tự như Moustache: không có khối thích hợp trong khuôn mẫu gạch, vì vậy không có nhu cầu một khối đóng {{/}}. Bạn chỉ cần khớp các câu lệnh của bạn như bạn làm với các mẫu Underscore chuẩn.

+0

Lưu ý rằng với cú pháp trên, bạn nên chắc chắn rằng có một không gian giữa biểu thức của bạn và '{{}}'. Ví dụ: '{{test}}' sẽ hoạt động, '{{test}}' sẽ không hoạt động. – Niyaz

1

Tôi không sử dụng các ký hiệu # nhưng tôi đã trải qua một lỗi tương tự khi tôi cố gắng sử dụng bộ ria mép ba {{{name}}} cho các giá trị unescaped với các thiết lập:

interpolate : /\{\{\{(.+?)\}\}\}/g, 
escape : /\{\{(.+?)\}\}/g, 

Nếu đó là lý do bạn đến đây, sau đây thiết lập các công trình

interpolate : /\{\{\{(\s*\w+?\s*)\}\}\}/g, 
escape : /\{\{(\s*\w+?\s*)\}\}(?!\})/g, 

tôi đã cố gắng định dạng Max nhưng điều đó không làm việc cho tôi, vì tôi có một kết hợp của các biểu ria mép gấp đôi và gấp ba lần và trong khi các biểu hiện ba đã làm việc tốt nó đã tước một nhân vật từ mỗi đầu của biến tên trong bộ ria mép kép tức là {{title}} dẫn đến dấu gạch dưới tìm kiếm biến có tên itl

+0

Tôi đến đây cho câu hỏi ban đầu, theo các câu trả lời và regex này là những gì làm việc cho tôi, cảm ơn bạn! –

Các vấn đề liên quan