Magento2'de <script type = “text / x-magento-init”> nedir?


29

Magento2'de yeniyim ve kuruluşumuz EE lisansını aldı. Yerel makineme kurdum ve varsayılan şablon HMTL ile karıştırılmış olanları yayıyor:

<script type="text/x-magento-init">
{
    "*": {
        "Magento_Ui/js/core/app": {
            "components": {
                "customer": {
                    "component": "Magento_Customer/js/view/customer"
                }
            }
        }
    }
}
</script>

Ve benzeri

<script type="text/x-magento-init">
{
"*": {
    "Magento_Ui/js/core/app": {
        "components": {
                "messages": {
                    "component": "Magento_Theme/js/view/messages"
                }
            }
        }
    }
}
</script>

Bunun ile mi KnockoutJSyoksa RequireJS? Bu çağrılar nedir ve bu yeni komut dosyası etiketi nedir<script type="text/x-magento-init">


1
Bazı dokümanlar bu soru gönderildikten sonra büyük olasılıkla eklendi: devdocs.magento.com/guides/v2.0/javascript-dev-guide/javascript/…
nevvermind

Yanıtlar:


29

Genel olarak "script type" kullanımı

<script type="....">Tarayıcıyı kullanırken sadece bildiklerini yorumlar (örneğin text/javascript, mesela).
Başka bir şey göz ardı edilir.
Temel olarak, özel bir tür kullanarak, görüntülemeden ve tarayıcıyı yorumlamadan sayfaya bilgi eklersiniz ve daha sonra bu bilgileri istediğiniz gibi kullanabilirsiniz.

Magento bunu nasıl kullanır?

Magento bu bölümleri sayfa yüklendikten sonra kullanır.
Bunları kullanan kod içinde bulunur lib/web/mage/apply/scripts.js.
Yukarıda belirtilen dosyanın ne yaptığını tam olarak anlamadım, ancak dosyanın içinde bunu belirten bir yorum var:

/**
 * Parses 'script' tags with a custom type attribute and moves it's data
 * to a 'data-mage-init' attribute of an element found by provided selector.
 * Note: All found script nodes will be removed from DOM.
 *
 * @returns {Array} An array of components not assigned to the specific element.
 *
 * @example Sample declaration.
 *      <script type="text/x-magento-init">
 *          {
 *              "body": {
 *                  "path/to/component": {"foo": "bar"}
 *              }
 *          }
 *      </script>
 *
 * @example Providing data without selector.
 *      {
 *          "*": {
 *              "path/to/component": {"bar": "baz"}
 *          }
 *      }
 */

Sonuç / Spekülasyon

Bunun, elemanları içeren şablonu tekrar yazmaya gerek kalmadan sayfadaki farklı js davranışlarını sayfadaki farklı elemanlara ayarlamanın bir yolu olduğunu düşünüyorum. Şablonlarınızdan birine
bir <script type="text/x-magento-init">tane eklemeniz, şablonunuzu sayfaya eklemeniz ve “otomatik-sihirli” bir şekilde davranışı doğru öğeye taşımanız gerekir.


Bu betiği kaldırmayı denedim app/design/frontend/package/template/Magento_Catalog/templates/product/view/gallery.phtmlama şansım yoktu. Ürün büyüteci ve / veya ürün galerisi gibi varsayılan davranışları kaldırmayla ilgili herhangi bir tavsiye (kesin olarak fotorama)?
Janaka Dombawela

JS bileşeni başlatma konusunda bir uyarı aldım. \ "X-magento-init \" veya \ "x-magento-template \" tuşlarını kullanın. phtml dosyasında <script> etiketini kullandığımda bunu nasıl çözeceğimi.
Sanjay Gohil

beyler, data-mage-init parametresinde bu geçen parametreyi nasıl kullanabilirim? ve sonuç nasıl dönecek?
Camit1dk

9

Ek olarak,

Satıcı \ magento \ magento2-baz \ lib \ web \ büyücü \ uygulamak \ scripts.js

var scriptSelector = 'script[type="text/x-magento-init"]',
        dataAttr = 'data-mage-init',
        virtuals = [];

Aşağıdaki kılavuzları kullanarak

http://devdocs.magento.com/guides/v2.1/javascript-dev-guide/javascript/js_init.html

Standart Sözdizimi

<script type="text/x-magento-init">
{
    // components initialized on the element defined by selector
    "<element_selector>": {
        "<js_component1>": ...,
        "<js_component2>": ...
    },
    // components initialized without binding to an element
    "*": {
        "<js_component3>": ...
    }
}
</script>

Danışılarak

http://alanstorm.com/magento_2_javascript_init_scripts

http://alanstorm.com/magento_2_introducing_ui_components

Magento genellikle x-magento-initbir RequireJS modülünü program olarak çağırmak için bu yöntemi kullanır . Ancak, asıl gücü, x-magento-initMagento Javascript Bileşeni oluşturma yeteneğidir.

Magento Javascript Bileşenleri, bir işlev döndüren RequireJS modülleridir.

Magento text/x-magento-init, * niteliğine sahip bir script etiketiyle karşılaşırsa

1] Belirtilen RequireJS modülünü başlat (Magento_Ui / js / core / app)

2] Veri nesnesinden geçen, bu modül tarafından döndürülen işlevi çağırın

Umarım yardımcı olur

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.