magento2 javascript组件开发

创建jQuery UI Widget

requirejs-config.js

var config = {
    map: {
        '*': {
            'widgetDemo':  'Vendor_Module/js/widgetDemo'
        }
    }
};
// <div data-mage-init='{"widgetDemo":{var1:1, var2:2}}'></div>
define([
    'jquery',
    'jquery/ui'
], function ($){
    $.widget('mage.widgetDemo', {
        options: {var1:0},
        _create: function () {
            // 生成HTML,绑定事件
        },
        _init: function () {
            // 当前元素
            this.element;
            // 参数
            this.options;
        }
    });

    return $.mage.widgetDemo;
});

建议使用data-role给widget中各元素定位,例如widget需要把结果生成到指定的span元素内,那么结果容器元素可以这样写<span data-role="result"></span>

调用方法

<div data-mage-init='{"widgetDemo":{"var1":"1", "var2":"2"}}'></div>

<script type="text/x-magento-init">
{
    "*": {
        "widgetDemo": {"var1":"1", "var2":"2"}
    }
}
</script>

Knockout 组件创建

[Inchoo_Js]/view/frontend/web/js/koexample.js

// <Inchoo_Js>/view/frontend/web/js/koexample.js
define(['ko', 'uiComponent'], function(ko, Component) {
    return Component.extend({
        defaults: {
            firstname: 'william',
            lastname: 'wen',
            fullname: ''
        },

        initialize: function () {
            var self = this;
            this._super();
            // 定义observe对象,与ko.observable()一样
            this.observe([
                'firstname',
                'lastname'
            ]);
            // ko以observe对象同步数据,ko.computed()把多个observe结果包装成一个observe,实现复杂的数据同步
            this.fullname = ko.computed(function(){
                return self.firstname()+' '+self.lastname();
            });
            console.log(this.param1);
        },
        
        getCount: function() {
            var cart = customerData.get('cart');
            return cart().summary_count;
        }
    });
});

(any).phtml

<div data-bind="scope: 'koexample'">
<!-- 直接在phtml里输出值 -->
<!-- ko text: firstname --><!-- /ko -->
<!-- ko text: lastname --><!-- /ko -->
<!-- ko text: fullname --><!-- /ko -->
<!-- ko text: getCount() --><!-- /ko -->

<!-- 调用模板 -->
<!-- ko template: getTemplate() --><!-- /ko -->
</div>
 
<script type="text/x-magento-init">
    {
        "*": {
            "Magento_Ui/js/core/app": {
                "components": {
                    "koexample": {
                        "component": "Inchoo_Js/js/koexample",//<Inchoo_Js>/view/frontend/web/template/example.html
                        "template" : "Inchoo_Js/example",
                        "param1" : "hello world!"
                    }
                }
            }
        }
    }
</script>

常用的Knockoutjs语法

<!-- ko i18n: 'Items in Cart' --><!-- /ko -->
<!-- ko text: getTotals() --><!-- /ko -->
<!-- ko if: getItemsQty() > 1 -->
<!-- /ko -->
<!-- ko foreach: getItems() -->
<li class="product-item">
    <div class="product">
        <!-- ko foreach: $parent.elems() -->
        <!-- ko template: getTemplate() --><!-- /ko -->
        <!-- /ko -->
    </div>
</li>
<!-- /ko -->

参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值