Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在js中改变函数参数,而所有参数都是对象?_Javascript_Function_Parameters_Requirejs - Fatal编程技术网

Javascript 如何在js中改变函数参数,而所有参数都是对象?

Javascript 如何在js中改变函数参数,而所有参数都是对象?,javascript,function,parameters,requirejs,Javascript,Function,Parameters,Requirejs,我使用的是requireJS,需要根据条件a==true改变请求的文件数量 目前我正在这样做,但不起作用: // ok var baseRequestWidgets = $('html').attr('init') != true ? [ "text!../tmp/page/tmp_page_header_generic.html" ,"text!../tmp/page/tmp_page_header_specific.html" ,"

我使用的是
requireJS
,需要根据条件
a==true
改变请求的文件数量

目前我正在这样做,但不起作用:

// ok
var  baseRequestWidgets = $('html').attr('init') != true 
    ?  [ "text!../tmp/page/tmp_page_header_generic.html"
        ,"text!../tmp/page/tmp_page_header_specific.html"       
        ,"text!../tmp/widgets/tmp_widget_header.html"
        ,"text!../tmp/widgets/tmp_widget_navbar.html"
        ,"text!../tmp/page/tmp_page_footer.html"
        ]
    :  [ "text!../tmp/widgets/tmp_widget_header.html"
        ,"text!../tmp/widgets/tmp_widget_navbar.html"
        ]
// not ok
    , baseRequestObjects = $('html').attr('init') != true 
    ?  page_header_generic, page_header_specfic, page_widget_header, page_widget_navbar, page_footer 
    : page_widget_header, page_widget_navbar 


    require( baseRequestWidgets, function( baseRequestObjects
                                                /*
                                                  page_header_generic
                                                , page_header_specfic
                                                , page_widget_header
                                                , page_widget_navbar
                                                , page_footer 
                                                */
                                                ){ ... }
问题是我无法使用
baseRequestObjects
将对象传递给函数。正确请求文件,但
baseRequestObjects
不起作用

问题:
知道我做错了什么吗?谢谢

编辑
我得到的错误是未定义
page\u header\u generic
,因此我假设我的page\u header\u generic声明是在请求底层文件之前完成的

编辑
更接近。。。RequireJS使用
baseRequestObjects
来存储第一个请求的文件,而实际上它是请求的文件数量可变的占位符

因此,问题应该是: 当包含x个对象名称的标牌持有人被误解为单独的占位符名称时,如何将动态数量的对象名称传递给requireJS?

编辑:
所以这是有效的,我不确定我是否喜欢它,因为我什么都没有通过

var baseRequestWidgets = function(trigger){
    var passBack;
    if ( trigger == "true" ){
        passBack = [     "text!../tmp/widgets/tmp_widget_header.html"
                        ,"text!../tmp/widgets/tmp_widget_navbar.html"
                    ];
                    } else {
        passBack = [     "text!../tmp/widgets/tmp_widget_header.html" 
                        ,"text!../tmp/widgets/tmp_widget_navbar.html"
                        ,"text!../tmp/page/tmp_page_header_generic.html"
                        ,"text!../tmp/page/tmp_page_header_specific.html"       
                        ,"text!../tmp/page/tmp_page_footer.html"
                    ];
            }
        return passBack;
        }   
    , getBaseRequestObjects = function( temps) {
        var objArr = [];
        for ( var i = 0; i < temps.length; i++){
            var thisString = temps[i],
            addToArray = temps[i].match(/tmp_(.*?)\.html/);
            objArr.push( addToArray[1] )
            }
        return objArr;
        }
    , baseRequestObjects
var baseRequestWidgets=函数(触发器){
var回传;
如果(触发器=“真”){
passBack=[“text.../tmp/widgets/tmp\u widget\u header.html”
,“text../tmp/widgets/tmp_widget_navbar.html”
];
}否则{
passBack=[“text.../tmp/widgets/tmp\u widget\u header.html”
,“text../tmp/widgets/tmp_widget_navbar.html”
,“text.../tmp/page/tmp\u page\u header\u generic.html”
,“text.../tmp/page/tmp\u page\u header\u specific.html”
,“text../tmp/page/tmp\u page\u footer.html”
];
}
回传;
}   
,getBaseRequestObjects=function(temps){
var-objArr=[];
对于(变量i=0;i
我需要把它放在一个函数中,因为这两个变量都必须是动态的

那么我打电话是这样的:

// inside my event call
var ...
    widgetsForThisRequest = baseRequestWidgets(trigger),
    baseRequestObjects = getBaseRequestObjects( widgetsForThisRequest );

require( widgetsForThisRequest,
    function( /* dynamic */ ) {
        // this will be dnyamic strings
        console.log( widgetsForThisRequest );
        // this will be dynamic objects
        console.log( baseRequestObjects );

        // loop using arguments - not sure if I like this
        for ( i = 0; i < baseRequestObjects.length; i++){
            widget = arguments[i];
            tempName = baseRequestObjects[i];
            ...
//在我的事件调用中
变量。。。
WidgetSfortIsRequest=baseRequestWidgets(触发器),
baseRequestObjects=getBaseRequestObjects(WidgetSfortIsRequest);
要求(WidgetsfortIsRequest,
函数(/*动态*/){
//这将是dnyamic字符串
console.log(widgetsfortisrequest);
//这将是动态对象
log(baseRequestObjects);
//使用参数循环-不确定我是否喜欢这个
对于(i=0;i

因此,我没有传递任何对象,必须使用
参数在我的循环中手动设置小部件。似乎可行,但不确定这是正确的方法。无论如何,有2个或5个以上的字符串,因此必须有2个或5个以上的对象携带相应的字符串。目前我还可以,但如果有人知道更好的方法,谢谢用于共享!

您可以将所有参数存储在一个数组(大小可变)中,并在该函数上使用。

您可以将所有参数存储在一个数组(大小可变)中,并在该函数上使用。

标记为“not okay”的代码与您认为的不一样;您不能创建这样的变量

我只需要重新排序您的include,以便您总是请求的两个文件首先出现,然后检查您的定义中是否存在其他模块

var  baseRequestWidgets = $('html').attr('init') != true 
    ?  [ "text!../tmp/widgets/tmp_widget_header.html"
        ,"text!../tmp/widgets/tmp_widget_navbar.html"
        ,"text!../tmp/page/tmp_page_header_generic.html"
        ,"text!../tmp/page/tmp_page_header_specific.html"       
        ,"text!../tmp/page/tmp_page_footer.html"
        ]
    :  [ "text!../tmp/widgets/tmp_widget_header.html"
        ,"text!../tmp/widgets/tmp_widget_navbar.html"
        ]

    require( baseRequestWidgets, function(    page_widget_header
                                            , page_widget_navbar
                                            , page_header_generic
                                            , page_header_specfic
                                            , page_footer 
                                            ){

         // page_widget_header and page_widget_navbar are always loaded

         // page_header_generic, page_header_specfic and page_footer
         // are undefined if init === true
    }

标记为“not okay”的代码不符合您的想法;您不能创建这样的变量

我只需要重新排序您的include,以便您总是请求的两个文件首先出现,然后检查您的定义中是否存在其他模块

var  baseRequestWidgets = $('html').attr('init') != true 
    ?  [ "text!../tmp/widgets/tmp_widget_header.html"
        ,"text!../tmp/widgets/tmp_widget_navbar.html"
        ,"text!../tmp/page/tmp_page_header_generic.html"
        ,"text!../tmp/page/tmp_page_header_specific.html"       
        ,"text!../tmp/page/tmp_page_footer.html"
        ]
    :  [ "text!../tmp/widgets/tmp_widget_header.html"
        ,"text!../tmp/widgets/tmp_widget_navbar.html"
        ]

    require( baseRequestWidgets, function(    page_widget_header
                                            , page_widget_navbar
                                            , page_header_generic
                                            , page_header_specfic
                                            , page_footer 
                                            ){

         // page_widget_header and page_widget_navbar are always loaded

         // page_header_generic, page_header_specfic and page_footer
         // are undefined if init === true
    }

嗯。从来没听说过。让我试试。嗯。从来没听说过。让我试试。好的。也有可能。我也有一个变通方法,我还不确定。见上文。如果你喜欢,反馈!好的。也有可能。我也有一个变通方法,我还不确定。见上文。如果你喜欢,反馈!我做了一些类似于你最近编辑的事情有几次,虽然我会以不同的方式实现它,但这个概念是合理的。如果它做了你需要它做的事情,我说随它去。我做了几次类似于你最新编辑的事情,虽然我会以不同的方式实现它,但这个概念是合理的。如果它做了你需要它做的事情,我说随我去T