2013-02-22 32 views
8

Tôi đang gặp rắc rối với bụi nếu điều kiện. Tôi có một phần mà điểm đến 2 mẫu bụi khác nhau tùy thuộc vào Mã quốc giaBụi nếu điều kiện

{>"receipt/merchantInfo/merchantInfo_{countryCode}"/} 

Tôi đang cố gắng để làm cho một nếu điều kiện khác mà sẽ tìm ra nếu {countryCode} là Mỹ. Ví dụ:

{@if cond="'{countryCode}' == 'US'"} 
<p>is country code US</p> 
{:else} 
<p>is NOT country code US</p> 
{/if} 

Điều này không hoạt động. Bất cứ ai có một ý tưởng mà tôi đã đi sai với điều này?

+0

* điều kiện chỉ để làm cho nó dễ dàng hơn để fint nó – eMarine

Trả lời

19

Trình trợ giúp @if đã không được chấp nhận vì lỗ hổng bảo mật tiềm ẩn (nó sử dụng eval trên điều kiện). Tôi khuyên bạn nên sử dụng trình trợ giúp @eq thay thế.

{@eq key=countryCode value="US"} 
    <p>is country code US</p> 
{:else} 
    <p>is NOT country code US</p> 
{/eq} 

Nếu điều đó không làm việc, hãy chắc chắn countryCode có sẵn trong ngữ cảnh của bạn (bạn có thể sử dụng {@contextDump/} cho điều đó).

+0

Được thăng hạng để đề cập đến lỗ hổng bảo mật. Làm thế nào về 'chọn'? Tôi có thể sử dụng 'select' với' eq', 'gte' không? và làm thế nào tôi có thể viết các điều kiện phức tạp? Giả sử có thể sử dụng 'A> B && B <= C && C! = 10' – thefourtheye

+1

' select' bằng 'eq',' gt', 'lt', v.v. . Bạn phải sử dụng lồng nhau và thường kết thúc lặp lại một số mã. Đã có những cuộc đàm phán về việc tạo ra những người giúp đỡ 'và' và' hoặc', nhưng trong thời gian chờ đợi, tôi sẽ khuyên bạn nên thay đổi dữ liệu của mình, nếu có thể. – smfoote

+0

Bạn có thể cung cấp nguồn cho điều này không? Mã/trang web dành cho người giúp đỡ dustjs không đề cập rằng "nếu" không được chấp nhận. –

10

tôi sẽ làm điều này:

{@select key=countryCode } 
    {@eq value="US"}<p>is country code US</p>{/eq} 
    {@eq value="UK"}<p>is country code UK</p>{/eq} 
    {@default}<p>is NOT country code US or UK</p>{/default} 
{/select} 

Hãy chắc chắn rằng bạn đang sử dụng phiên bản 1.x hay muộn.

Đảm bảo bạn đã tải Helpers. Tôi chạy vào ngày hôm trước. Bạn cần nó để làm việc này và nó sẽ không lỗi cho bạn biết rằng nó không phải là.

2

Nếu bạn say mê @if nhưng không thích vấn đề bảo mật xung quanh việc sử dụng eval, bạn có thể sử dụng trình trợ giúp @if thay thế của tôi. Nó cung cấp một thuộc tính test = "expr" để xác định điều kiện if của bạn. eval không được sử dụng để đánh giá biểu thức.

Các biến trong biểu thức được giới hạn đối với tên bụi và đường dẫn được sử dụng để truy cập các giá trị từ ngữ cảnh. Hằng số là số nguyên, dạng float, hex và chuỗi JavaScript ("xx" hoặc "xx"). Các toán tử có thể là một "biến", một hằng số, hoặc một biểu thức nhị phân hoặc đơn nhất sinh ra một giá trị. Các toán tử quan hệ là <,>, < =,> =, ==,! =. Các toán tử Boolean! (unary), || và & & .. Ưu tiên toán tử giống như JavaScript và dấu ngoặc đơn được phép cho rõ ràng hoặc khi ưu tiên không phải là thứ bạn muốn.

Dưới đây là một ví dụ:

{@if test="state == 'CA' || state == 'NY'"} 
    true stuff goes here 
{:else} 
    false stuff goes here 
{/if} 

Lưu ý rằng nó vẫn có code để cho phép cond = "expr" thuộc tính có sử dụng eval(). Điều này cung cấp một đường dẫn di trú cho mã hiện có.

Bạn có thể cài đặt nó làm mô-đun npm (https://npmjs.org/package/dustmotes-if).

2

Bạn cũng có thể sử dụng:

{#key} 
    Some content 
{:else} 
    Some other content, if key doesn't have a value 
{/key} 

Ví dụ:

liệu

{ 
    firstName: "Mickey", 
    lastName: "Mouse", 
    website: null, 
    phone:  "1-800-DISNEYWORLD" 
} 

Bụi Template

<p>First Name: {firstName}</p> 
<p>Last Name: {lastName}</p> 
{#website} 
    <p>Website: {website}</p> 
{:else} 
    <p>Phone: {phone}</p> 
{/website} 

Output:

First Name: Mickey 
Last Name: Mouse 
Phone: 1-800-DISNEYWORLD 
Các vấn đề liên quan