如何在requirejs中访问define之外的变量

时间:2017-11-14 20:34:02

标签: javascript knockout.js requirejs

我基于ko(淘汰赛)实现了以下模块。

define(['ko'],
    function(ko) {
        function compareViewModel() {
            var self = this;
            self.products = ko.observableArray([]);
            self.addProduct = function(p) {
                self.products.push(p);
            }
            self.visible = ko.computed(function() {
                return self.products().length > 0;
            });
        }

        return { cvm: compareViewModel() };
    });

我希望能够在cvm之外访问define

$(function () {
    //ACCESS CVM HERE    
    $('.compare-chk').click(function () {
        var $chk = $(this).prev('input:checkbox');
        if ($chk !== 'undefined') {
            if (!$chk.is(':checked')) {
                cvm.addProduct($chk.attr('value'));
                console.log(cvm.products());
            }
        }
    });
});

这甚至可能吗?

1 个答案:

答案 0 :(得分:1)

为了访问cvm,您必须说明您需要定义此模块的模块:

requirejs(['jquery', 'ko'], function($, ko){
    $(function () {
    //ACCESS CVM HERE    
        $('.compare-chk').click(function () {
            var $chk = $(this).prev('input:checkbox');
            if ($chk !== 'undefined') {
                if (!$chk.is(':checked')) {
                    ko.cvm.addProduct($chk.attr('value'));
                    console.log(ko.cvm.products());
                }
            }
        });
    });
});

注意我们作为requirejs的第一个参数传递的数组中的模块和库很可能需要进行一些调整。您必须指定这些文件在应用程序中的位置。例如,请查看here,这是requirejs或here的入门教程,这是该库的官方文档。