I'm trying to understand knockoutjs in magento2.especially custom template binding.I'm not able to get idea flow of rendering this.

Can any one have idea how it works? atleast Where can I find definition of getTemplate?

<!-- ko if: (!quoteIsVirtual) -->
            <!-- ko foreach: getRegion('customer-email') -->
                <!-- ko template: getTemplate() --><!-- /ko -->
            <!--/ko-->
        <!--/ko-->
up vote 25 down vote accepted
+50

Open

Magento/Checkout/view/frontend/layout/checkout_index_index.xml
file. look at following line

<item name="component" xsi:type="string">Magento_Checkout/js/view/shipping</item>

So

Magento/Checkout/view/frontend/web/js/view/shipping.js
this is your js file. Open it. Look
template: 'Magento_Checkout/shipping'
this is the template file for this JS.

Go back to

Magento/Checkout/view/frontend/layout/checkout_index_index.xml
line 122 (M2 2.0.0-rc)
<item name="children" xsi:type="array">
here you can see some child node. like

<item name="customer-email" xsi:type="array">
----
---
</item>

So

getTemplate()
is responsible for current template rendering that means

Magento/Checkout/view/frontend/web/template/form/element/email.html

Open it, then you can see following code snippet


<!-- ko foreach: getRegion('additional-login-form-fields') -->
            <!-- ko template: getTemplate() --><!-- /ko -->
            <!-- /ko -->

this 'additional-login-form-fields' node is the child node of 'customer-email' .

For your code snippet, if quote is not virtual then pick ko

foreach: getRegion('customer-email')
which is child node name and render its template.

  • getRegion('customer-email') means <item name="customer-email" xsi:type="array">. Is it correct? i mean it will iterate child nodes of that. – Sivakumar K Nov 12 '15 at 9:16
  • its render only current template. I updated the answer. – Sohel Rana Nov 12 '15 at 9:34
  • thanks for your response.so many times in xml ..core team using <item name="component" xsi:type="string">uiComponent</item> .so which js file consider in this case? – Sivakumar K Nov 12 '15 at 10:41
  • yes. look following file Magento/Ui/view/base/requirejs-config.js . here uiComponent is declare as js. – Sohel Rana Nov 12 '15 at 12:05
  • How to get Site URl, Checkoutpageurl in any of the knockout template ? – Arun Karnawat Aug 13 '16 at 7:16

You can find defination of getTemplate from,

`root\vendor\magento\module-ui\view\base\web\js\lib\core\element\element.js` 

file from line no. 255 to 257.

  getTemplate: function () {
                return this.template;
            }
  • above code based on magento 2.0.0 general availability. – Rakesh Jesadiya Nov 19 '15 at 9:44

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.