如何在Bootstrap node.js app中解决错误“无法设置未定义的属性'emulateTransitionEnd'?

时间:2015-06-26 07:16:34

标签: jquery node.js twitter-bootstrap

我从头创建了Node.js应用程序,并在app.js中添加了

global.jQuery = require('jquery'); 

之后它给出了如下错误:

/home/yojna/web/node_modules/bootstrap/js/transition.js:36
  $.fn.emulateTransitionEnd = function (duration) {
                        ^
    TypeError: Cannot set property 'emulateTransitionEnd' of undefined
    at /home/yojna/web/node_modules/bootstrap/js/transition.js:36:29
    at Object.<anonymous>(/home/yojna/web/node_modules/bootstrap/js/transition.js:59:2)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.require (module.js:364:17)
    at require (module.js:380:17)
    at Object.<anonymous> 
    (/home/yojna/web/node_modules/bootstrap/dist/js/npm.js:2:1)
    at Module._compile (module.js:456:26)
    yojna@yojna-Inspiron-7520:~/web$ 

4 个答案:

答案 0 :(得分:3)

NPM包含服务器端库。 要包含引导程序或jquery等客户端库,请改为使用Bower

我在快递应用程序中完成了这个:

  1. 创建.bowerrc文件并写下以下行:

    bower install bootstrap
    
  2. 使用Bower下载bootstrap和jquery:

    app.use(express.static(__dirname + '/public'));
    
  3. 然后,在app.js文件中将您的公共文件夹定义为静态文件:

    script(src='components/jquery/dist/jquery.min.js')
    script(src='components/bootstrap/dist/js/bootstrap.min.js')
    
  4. 最后,在您的视图中添加脚本标记(我在这里使用Jade):

    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.LinearLayout;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        private LinearLayout linearLayoutFrom;
        private LinearLayout additionalContactFrom;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            additionalContactFrom = (LinearLayout) findViewById(R.id.LinearLayoutAdditionalContactFrom);
            linearLayoutFrom = (LinearLayout) findViewById(R.id.LinearLayoutFrom);
    
            linearLayoutFrom.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    Toast.makeText(getApplicationContext(),
                            "linearLayoutFrom clicked!!!", Toast.LENGTH_SHORT)
                            .show();
                    if (additionalContactFrom.getVisibility() == View.GONE) {
    
                        additionalContactFrom.setVisibility(View.VISIBLE);
    
                    } else {
                        additionalContactFrom.setVisibility(View.GONE);
    
                    }
                }
            });
    
            additionalContactFrom.setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    Toast.makeText(getApplicationContext(),
                            "additionalContactFrom clicked!!!", Toast.LENGTH_SHORT)
                            .show();
    
                    if (linearLayoutFrom.getVisibility() == View.GONE) {
    
                        linearLayoutFrom.setVisibility(View.VISIBLE);
    
                    } else {
    
                        linearLayoutFrom.setVisibility(View.GONE);
    
                    }
                }
            });
        }
    
    }
    

答案 1 :(得分:3)

尝试声明美元符号变量:

global.jQuery = global.$ = require('jquery'); 

答案 2 :(得分:2)

我有这个问题,因为我已经包含了#34; bootstrap&#34;在我的供应商webpack 2配置中,但正在使用:

require("bootstrap-loader");

因此,浏览器无法正确找到bootstrap-loader软件包。

答案 3 :(得分:0)

你不应该require它。 Jquery是一个客户端库,而Node.js是一个后端服务器。

如果您想在您的Node.js应用中使用Jquery,只需将其添加到您的HTML文件中:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.js"></script>