@data-value : The Computed Value Attribute
The data-value attribute enables computed or dynamic value assignment for elements, allowing you to bind expressions to element values, store intermediate calculations, or pass computed values to document parameters. This attribute is primarily used with <var> elements for creating document-level variables and computed values.
Summary
The data-value attribute provides dynamic value computation and assignment, enabling:
- Computed value storage in document-level variables
- Expression evaluation for complex calculations
- Intermediate value caching for reuse throughout the document
- Dynamic value assignment from data binding expressions
- Document parameter creation for cross-reference usage
This attribute is essential for:
- Creating computed values for use throughout the document
- Storing intermediate calculations
- Building document-level constants from data
- Creating reusable value references
- Implementing calculated fields
- Dynamic parameter generation
Primary Use Case: The data-value attribute is most commonly used with <var> elements in combination with data-id to create document-level variables that can be referenced elsewhere.
Usage
The data-value attribute is applied to <var> elements and <num> elements:
<!-- Create document variable -->
<var data-id="taxRate" data-value="0.08"></var>
<!-- Use variable elsewhere -->
<div>Tax Amount: $</div>
Basic Syntax
<!-- Store simple value -->
<var data-id="companyName" data-value=""></var>
<!-- Store computed value -->
<var data-id="total" data-value=""></var>
<!-- Store complex expression -->
<var data-id="discount" data-value=""></var>
<!-- Number element with data-value -->
<num data-value="" data-format="C"></num>
Supported Elements
The data-value attribute is supported on the following elements:
<var>- Variable element for storing computed values<num>- Number element for formatted numeric display
Note: When used with <var>, the data-id attribute is typically required to make the value accessible as a document parameter.
Binding Values
Attribute Values
| Value Type | Description |
|---|---|
| Literal Value | Direct string, number, or boolean value |
| Binding Expression | Expression that evaluates to a value: `` |
| Property Access | Reference to model property: `` |
| Calculation | Mathematical expression: `` |
| Conditional | Ternary expression: `` |
Type
Type: object (any type that can be converted to string)
Default: null
Expression Support
The attribute accepts any valid binding expression:
<!-- Simple value -->
<var data-id="name" data-value=""></var>
<!-- Mathematical calculation -->
<var data-id="taxAmount" data-value=""></var>
<!-- String concatenation -->
<var data-id="fullName" data-value=""></var>
<!-- Conditional expression -->
<var data-id="status" data-value=""></var>
<!-- Complex calculation -->
<var data-id="total" data-value=""></var>
Notes
Variable Storage Mechanism
When <var> elements have both data-id and data-value:
- Expression in
data-valueis evaluated during data binding - Result is stored in
document.Params[data-id] - Value becomes available throughout the document
- Can be referenced using `` syntax
Visibility Behavior
<var> elements with data-id and data-value but no content are automatically hidden:
- If the element has content, it displays normally
- If the element is empty, it becomes
Visible = false - This prevents empty variable declarations from affecting layout
Variable Scope
Variables created with data-value have document-wide scope:
- Available in subsequent binding expressions
- Can be used in any element after the
<var>declaration - Not limited to parent/child relationships
- Persist throughout document generation
Expression Evaluation Order
Variables are evaluated in document order:
- Variables must be declared before use
- Cannot reference variables declared later in document
- Consider placement of variable declarations
Formatting Numbers
When used with <num> elements, data-value provides the raw value:
<num data-value="" data-format="C"></num>
The data-format attribute controls display formatting while data-value provides the underlying value.
Use Cases
Document-Level Constants:
<var data-id="taxRate" data-value="0.0875"></var>
<var data-id="companyName" data-value="Acme Corporation"></var>
Computed Totals:
<var data-id="grandTotal" data-value=""></var>
Conditional Values:
<var data-id="discountRate" data-value=""></var>
Complex Calculations:
<var data-id="finalPrice"
data-value=""></var>
Examples
1. Simple Variable Storage
Store a computed value for later use:
<var data-id="orderTotal" data-value=""></var>
<div>
<h2>Order Summary</h2>
<p>Subtotal: $</p>
<p>Tax: $</p>
<p>Total: $</p>
</div>
2. Tax Rate Constant
Create a reusable tax rate:
<var data-id="taxRate" data-value="0.0825"></var>
<table style="width: 100%;">
<template data-bind="">
<tr>
<td></td>
<td>$</td>
<td>$</td>
<td>$</td>
</tr>
</template>
</table>
3. Discount Calculation
Compute and store discount amount:
<var data-id="discountPercent" data-value=""></var>
<var data-id="discountAmount" data-value=""></var>
<div style="padding: 15pt; background-color: #d4edda;">
<h3>Your Discount</h3>
<p>Discount Rate: %</p>
<p>Discount Amount: $</p>
<p>You Save: $</p>
</div>
4. Full Name Computation
Combine first and last names:
<var data-id="customerFullName"
data-value=""></var>
<h1>Invoice for </h1>
<div>
<p>Dear ,</p>
<p>Thank you for your business.</p>
</div>
5. Formatted Number Display
Display computed value with formatting:
<div>
<p>Unit Price:
<num data-value="" data-format="C"></num>
</p>
<p>Quantity: </p>
<p>Line Total:
<num data-value="" data-format="C"></num>
</p>
</div>
6. Conditional Status Text
Store conditional status string:
<var data-id="statusText"
data-value=""></var>
<var data-id="statusColor"
data-value=""></var>
<div style="color: ; font-weight: bold; font-size: 16pt;">
</div>
7. Complex Financial Calculation
Multi-step calculation with intermediate values:
<!-- Store intermediate calculations -->
<var data-id="itemTotal" data-value=""></var>
<var data-id="taxAmount" data-value=""></var>
<var data-id="shippingCost" data-value=""></var>
<var data-id="grandTotal" data-value=""></var>
<table style="width: 100%; font-size: 12pt;">
<tr>
<td style="text-align: right; padding: 5pt;">Subtotal:</td>
<td style="text-align: right; padding: 5pt; width: 100pt;">$</td>
</tr>
<tr>
<td style="text-align: right; padding: 5pt;">Tax (8.25%):</td>
<td style="text-align: right; padding: 5pt;">$</td>
</tr>
<tr>
<td style="text-align: right; padding: 5pt;">Shipping:</td>
<td style="text-align: right; padding: 5pt;">
$
<if data-test="">
<span style="color: green; font-size: 8pt;"> (FREE!)</span>
</if>
</td>
</tr>
<tr style="border-top: 2pt solid black; font-weight: bold; font-size: 14pt;">
<td style="text-align: right; padding: 10pt 5pt;">Grand Total:</td>
<td style="text-align: right; padding: 10pt 5pt;">$</td>
</tr>
</table>
8. Date Formatting
Store formatted date string:
<var data-id="invoiceDate" data-value=""></var>
<var data-id="dueDate" data-value=""></var>
<div>
<p><strong>Invoice Date:</strong> </p>
<p><strong>Payment Due:</strong> </p>
</div>
9. Percentage Calculations
Calculate and display percentages:
<var data-id="completionPercent"
data-value=""></var>
<div style="padding: 15pt; border: 1pt solid #336699;">
<h3>Progress Report</h3>
<p>Completed: of items</p>
<p>Completion Rate:
<num data-value="" data-format="#0.0"></num>%
</p>
<div style="width: 100%; background-color: #ddd; height: 20pt;">
<div style="width: %; background-color: #336699; height: 20pt;"></div>
</div>
</div>
10. Conditional Pricing
Store pricing based on customer type:
<var data-id="basePrice" data-value=""></var>
<var data-id="discount"
data-value=""></var>
<var data-id="finalPrice" data-value=""></var>
<div>
<p>List Price: $</p>
<if data-test="">
<p>Your Discount: %</p>
</if>
<p style="font-size: 16pt; font-weight: bold;">
Your Price: $
</p>
</div>
11. Company Information Variables
Store company details as variables:
<var data-id="companyName" data-value="Acme Corporation"></var>
<var data-id="companyAddress" data-value="123 Business St, Suite 100"></var>
<var data-id="companyCityState" data-value="New York, NY 10001"></var>
<var data-id="companyPhone" data-value="(555) 123-4567"></var>
<!-- Use throughout document -->
<div style="text-align: center; margin-bottom: 20pt;">
<h1></h1>
<p></p>
<p></p>
<p>Phone: </p>
</div>
12. Aggregate Statistics
Calculate summary statistics:
<!-- Hidden variables for calculations -->
<var data-id="totalOrders" data-value=""></var>
<var data-id="totalRevenue" data-value=""></var>
<var data-id="avgOrderValue" data-value=""></var>
<div style="background-color: #e7f3ff; padding: 20pt; margin: 20pt 0;">
<h2 style="margin: 0 0 15pt 0;">Summary Statistics</h2>
<table style="width: 100%; font-size: 12pt;">
<tr>
<td>Total Orders:</td>
<td style="text-align: right; font-weight: bold;"></td>
</tr>
<tr>
<td>Total Revenue:</td>
<td style="text-align: right; font-weight: bold;">
<num data-value="" data-format="C"></num>
</td>
</tr>
<tr>
<td>Average Order Value:</td>
<td style="text-align: right; font-weight: bold;">
<num data-value="" data-format="C"></num>
</td>
</tr>
</table>
</div>
13. Shipping Cost Calculation
Complex shipping logic:
<var data-id="weight" data-value=""></var>
<var data-id="baseShipping" data-value="5.99"></var>
<var data-id="weightCharge" data-value=""></var>
<var data-id="totalShipping" data-value=""></var>
<var data-id="freeShipping" data-value=""></var>
<var data-id="finalShipping" data-value=""></var>
<div>
<p>Package Weight: lbs</p>
<if data-test="">
<p style="color: green; font-weight: bold;">
FREE SHIPPING! (Orders over $50)
</p>
</if>
<if data-test="">
<p>Shipping Cost: $</p>
</if>
</div>
14. Dynamic Page Title
Create page-specific titles:
<var data-id="pageTitle"
data-value=""></var>
<var data-id="pageSubtitle"
data-value=""></var>
<div style="background-color: #336699; color: white; padding: 20pt;">
<h1 style="margin: 0;"></h1>
<div style="margin-top: 5pt; font-size: 11pt;"></div>
</div>
15. Conditional Message Text
Generate dynamic messages:
<var data-id="daysUntilDue" data-value=""></var>
<var data-id="urgencyMessage"
data-value=""></var>
<var data-id="urgencyColor"
data-value=""></var>
<div style="padding: 15pt; border: 2pt solid ; background-color: rgba(255,255,255,0.9);">
<div style="color: ; font-weight: bold; font-size: 14pt;">
</div>
<if data-test="">
<p>Payment due in days</p>
</if>
<if data-test="">
<p>Payment is days overdue</p>
</if>
</div>
16. Multi-Currency Support
Calculate currency conversions:
<var data-id="usdAmount" data-value=""></var>
<var data-id="exchangeRate" data-value=""></var>
<var data-id="localAmount" data-value=""></var>
<table style="width: 100%;">
<tr>
<td>Amount (USD):</td>
<td style="text-align: right;">
<num data-value="" data-format="C"></num>
</td>
</tr>
<tr>
<td>Exchange Rate:</td>
<td style="text-align: right;"></td>
</tr>
<tr style="font-weight: bold; border-top: 1pt solid black;">
<td>Amount ():</td>
<td style="text-align: right;">
<num data-value="" data-format="#,##0.00"></num>
</td>
</tr>
</table>
17. Inventory Status Calculation
Compute inventory metrics:
<var data-id="onHand" data-value=""></var>
<var data-id="committed" data-value=""></var>
<var data-id="available" data-value=""></var>
<var data-id="reorderPoint" data-value=""></var>
<var data-id="needsReorder" data-value=""></var>
<div style="padding: 15pt; border: 1pt solid #ddd;">
<h3></h3>
<table style="width: 100%;">
<tr>
<td>On Hand:</td>
<td style="text-align: right;"></td>
</tr>
<tr>
<td>Committed:</td>
<td style="text-align: right;"></td>
</tr>
<tr style="font-weight: bold;">
<td>Available:</td>
<td style="text-align: right;"></td>
</tr>
</table>
<if data-test="">
<div style="margin-top: 10pt; padding: 10pt; background-color: #fff3cd; border: 1pt solid #ffc107;">
<strong>⚠ Reorder Required</strong><br/>
Available quantity () is at or below reorder point ()
</div>
</if>
</div>
18. Loan Payment Calculator
Calculate loan payment details:
<var data-id="principal" data-value=""></var>
<var data-id="annualRate" data-value=""></var>
<var data-id="monthlyRate" data-value=""></var>
<var data-id="months" data-value=""></var>
<var data-id="monthlyPayment"
data-value=""></var>
<var data-id="totalPayments" data-value=""></var>
<var data-id="totalInterest" data-value=""></var>
<div style="padding: 20pt; border: 2pt solid #336699;">
<h2 style="color: #336699;">Loan Details</h2>
<table style="width: 100%; font-size: 11pt;">
<tr>
<td>Loan Amount:</td>
<td style="text-align: right;">
<num data-value="" data-format="C"></num>
</td>
</tr>
<tr>
<td>Interest Rate:</td>
<td style="text-align: right;">%</td>
</tr>
<tr>
<td>Term:</td>
<td style="text-align: right;"> years</td>
</tr>
<tr style="border-top: 1pt solid black; font-weight: bold; font-size: 12pt;">
<td>Monthly Payment:</td>
<td style="text-align: right;">
<num data-value="" data-format="C"></num>
</td>
</tr>
<tr>
<td>Total Payments:</td>
<td style="text-align: right;">
<num data-value="" data-format="C"></num>
</td>
</tr>
<tr>
<td>Total Interest:</td>
<td style="text-align: right; color: red;">
<num data-value="" data-format="C"></num>
</td>
</tr>
</table>
</div>
19. Grade Calculation
Compute grade statistics:
<var data-id="totalPoints" data-value=""></var>
<var data-id="possiblePoints" data-value=""></var>
<var data-id="percentage" data-value=""></var>
<var data-id="letterGrade"
data-value=""></var>
<div style="padding: 20pt; border: 2pt solid #336699;">
<h2>Grade Report for </h2>
<table style="width: 100%; margin: 15pt 0;">
<thead>
<tr style="background-color: #f0f0f0;">
<th style="padding: 8pt; text-align: left;">Assignment</th>
<th style="padding: 8pt; text-align: right;">Points Earned</th>
<th style="padding: 8pt; text-align: right;">Points Possible</th>
</tr>
</thead>
<tbody>
<template data-bind="">
<tr>
<td style="padding: 6pt; border-bottom: 1pt solid #ddd;"></td>
<td style="padding: 6pt; border-bottom: 1pt solid #ddd; text-align: right;">
</td>
<td style="padding: 6pt; border-bottom: 1pt solid #ddd; text-align: right;">
</td>
</tr>
</template>
</tbody>
<tfoot>
<tr style="font-weight: bold; border-top: 2pt solid black;">
<td style="padding: 8pt;">Total:</td>
<td style="padding: 8pt; text-align: right;"></td>
<td style="padding: 8pt; text-align: right;"></td>
</tr>
</tfoot>
</table>
<div style="padding: 15pt; background-color: #e7f3ff; text-align: center;">
<div style="font-size: 14pt; margin-bottom: 5pt;">
Final Grade: <num data-value="" data-format="#0.0"></num>%
</div>
<div style="font-size: 24pt; font-weight: bold; color: #336699;">
</div>
</div>
</div>
20. Comprehensive Invoice with All Calculations
Production-ready invoice with complete calculations:
<!-- Company Information -->
<var data-id="companyName" data-value="Acme Corporation"></var>
<var data-id="companyAddress" data-value="123 Business Street"></var>
<!-- Invoice Calculations -->
<var data-id="itemsSubtotal" data-value=""></var>
<var data-id="discountPercent" data-value=""></var>
<var data-id="discountAmount" data-value=""></var>
<var data-id="subtotalAfterDiscount" data-value=""></var>
<var data-id="taxRate" data-value="0.0825"></var>
<var data-id="taxAmount" data-value=""></var>
<var data-id="shippingCost" data-value=""></var>
<var data-id="grandTotal" data-value=""></var>
<!-- Status Variables -->
<var data-id="isPaid" data-value=""></var>
<var data-id="statusColor" data-value=""></var>
<var data-id="statusText" data-value=""></var>
<!-- Document -->
<div style="padding: 30pt;">
<!-- Header -->
<table style="width: 100%; margin-bottom: 30pt;">
<tr>
<td style="width: 50%;">
<h1 style="margin: 0; color: #336699;"></h1>
<div></div>
</td>
<td style="width: 50%; text-align: right;">
<h1 style="margin: 0;">INVOICE</h1>
<div><strong>#</strong></div>
<div>Date: </div>
</td>
</tr>
</table>
<!-- Bill To -->
<div style="margin-bottom: 30pt;">
<strong>Bill To:</strong><br/>
<br/>
</div>
<!-- Line Items -->
<table style="width: 100%; border-collapse: collapse;">
<thead>
<tr style="background-color: #336699; color: white;">
<th style="padding: 10pt; text-align: left;">Description</th>
<th style="padding: 10pt; text-align: right;">Qty</th>
<th style="padding: 10pt; text-align: right;">Unit Price</th>
<th style="padding: 10pt; text-align: right;">Total</th>
</tr>
</thead>
<tbody>
<template data-bind="">
<tr>
<td style="padding: 8pt; border-bottom: 1pt solid #ddd;"></td>
<td style="padding: 8pt; border-bottom: 1pt solid #ddd; text-align: right;">
</td>
<td style="padding: 8pt; border-bottom: 1pt solid #ddd; text-align: right;">
<num data-value="" data-format="C"></num>
</td>
<td style="padding: 8pt; border-bottom: 1pt solid #ddd; text-align: right; font-weight: bold;">
<num data-value="" data-format="C"></num>
</td>
</tr>
</template>
</tbody>
</table>
<!-- Totals -->
<div style="width: 50%; margin-left: 50%; margin-top: 20pt;">
<table style="width: 100%;">
<tr>
<td style="padding: 5pt; text-align: right;">Subtotal:</td>
<td style="padding: 5pt; text-align: right; width: 120pt;">
<num data-value="" data-format="C"></num>
</td>
</tr>
<if data-test="">
<tr>
<td style="padding: 5pt; text-align: right;">
Discount (%):
</td>
<td style="padding: 5pt; text-align: right; color: green;">
-<num data-value="" data-format="C"></num>
</td>
</tr>
</if>
<tr>
<td style="padding: 5pt; text-align: right;">Tax (%):</td>
<td style="padding: 5pt; text-align: right;">
<num data-value="" data-format="C"></num>
</td>
</tr>
<tr>
<td style="padding: 5pt; text-align: right;">
Shipping:
<if data-test="">
<span style="color: green; font-size: 8pt;"> (FREE!)</span>
</if>
</td>
<td style="padding: 5pt; text-align: right;">
<num data-value="" data-format="C"></num>
</td>
</tr>
<tr style="border-top: 2pt solid black; font-weight: bold; font-size: 14pt;">
<td style="padding: 10pt 5pt; text-align: right;">Total:</td>
<td style="padding: 10pt 5pt; text-align: right;">
<num data-value="" data-format="C"></num>
</td>
</tr>
</table>
</div>
<!-- Payment Status -->
<div style="margin-top: 30pt; padding: 15pt; border: 2pt solid ; text-align: center;">
<div style="color: ; font-weight: bold; font-size: 18pt;">
</div>
<if data-test="">
<div style="margin-top: 5pt;">
Payment received:
</div>
</if>
<if data-test="">
<div style="margin-top: 5pt;">
Payment due:
</div>
</if>
</div>
</div>
See Also
- var element - Variable element for computed values
- num element - Number element for formatted display
- data-id attribute - Variable identifier
- Data Binding - Complete data binding guide
- Expressions - Expression syntax reference
- Document Parameters - Document-level parameters